@liveblocks/react-ui 2.21.0-emails2 → 2.21.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.
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/HistoryVersionSummary.cjs.map +1 -1
- package/dist/components/HistoryVersionSummary.js.map +1 -1
- package/dist/components/HistoryVersionSummaryList.cjs.map +1 -1
- package/dist/components/HistoryVersionSummaryList.js.map +1 -1
- package/dist/components/InboxNotification.cjs.map +1 -1
- package/dist/components/InboxNotification.js.map +1 -1
- package/dist/components/InboxNotificationList.cjs.map +1 -1
- package/dist/components/InboxNotificationList.js.map +1 -1
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/Attachment.cjs.map +1 -1
- package/dist/components/internal/Attachment.js.map +1 -1
- package/dist/components/internal/Avatar.cjs.map +1 -1
- package/dist/components/internal/Avatar.js.map +1 -1
- package/dist/components/internal/Button.cjs.map +1 -1
- package/dist/components/internal/Button.js.map +1 -1
- package/dist/components/internal/Dropdown.cjs.map +1 -1
- package/dist/components/internal/Dropdown.js.map +1 -1
- package/dist/components/internal/EmojiPicker.cjs +68 -82
- package/dist/components/internal/EmojiPicker.cjs.map +1 -1
- package/dist/components/internal/EmojiPicker.js +70 -84
- package/dist/components/internal/EmojiPicker.js.map +1 -1
- package/dist/components/internal/Room.cjs.map +1 -1
- package/dist/components/internal/Room.js.map +1 -1
- package/dist/components/internal/Tooltip.cjs.map +1 -1
- package/dist/components/internal/Tooltip.js.map +1 -1
- package/dist/components/internal/User.cjs.map +1 -1
- package/dist/components/internal/User.js.map +1 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.js.map +1 -1
- package/dist/config.cjs.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/overrides.cjs +1 -0
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +1 -0
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/Composer/index.cjs.map +1 -1
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/FileSize.cjs.map +1 -1
- package/dist/primitives/FileSize.js.map +1 -1
- package/dist/primitives/Timestamp.cjs.map +1 -1
- package/dist/primitives/Timestamp.js.map +1 -1
- package/dist/primitives/index.cjs +0 -2
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.d.cts +4 -165
- package/dist/primitives/index.d.ts +4 -165
- package/dist/primitives/index.js +0 -2
- package/dist/primitives/index.js.map +1 -1
- package/dist/slate/plugins/paste.cjs +8 -1
- package/dist/slate/plugins/paste.cjs.map +1 -1
- package/dist/slate/plugins/paste.js +8 -1
- package/dist/slate/plugins/paste.js.map +1 -1
- package/dist/utils/Persist.cjs.map +1 -1
- package/dist/utils/Persist.js.map +1 -1
- package/dist/utils/Portal.cjs.map +1 -1
- package/dist/utils/Portal.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +5 -7
- package/src/styles/index.css +54 -10
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/primitives/EmojiPicker/contexts.cjs +0 -19
- package/dist/primitives/EmojiPicker/contexts.cjs.map +0 -1
- package/dist/primitives/EmojiPicker/contexts.js +0 -16
- package/dist/primitives/EmojiPicker/contexts.js.map +0 -1
- package/dist/primitives/EmojiPicker/index.cjs +0 -516
- package/dist/primitives/EmojiPicker/index.cjs.map +0 -1
- package/dist/primitives/EmojiPicker/index.js +0 -512
- package/dist/primitives/EmojiPicker/index.js.map +0 -1
- package/dist/primitives/EmojiPicker/utils.cjs +0 -330
- package/dist/primitives/EmojiPicker/utils.cjs.map +0 -1
- package/dist/primitives/EmojiPicker/utils.js +0 -326
- package/dist/primitives/EmojiPicker/utils.js.map +0 -1
- package/dist/utils/request-idle-callback.cjs +0 -15
- package/dist/utils/request-idle-callback.cjs.map +0 -1
- package/dist/utils/request-idle-callback.js +0 -12
- package/dist/utils/request-idle-callback.js.map +0 -1
- package/dist/utils/visually-hidden.cjs +0 -17
- package/dist/utils/visually-hidden.cjs.map +0 -1
- package/dist/utils/visually-hidden.js +0 -15
- package/dist/utils/visually-hidden.js.map +0 -1
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
import { chunk } from '@liveblocks/core';
|
|
2
|
-
import { EMOJI_FONT_FAMILY } from '../../constants.js';
|
|
3
|
-
import { capitalize } from '../../utils/capitalize.js';
|
|
4
|
-
|
|
5
|
-
const EMOJIBASE_VERSION = "15.3.0";
|
|
6
|
-
const EMOJIBASE_CDN_URL = `https://cdn.jsdelivr.net/npm/emojibase-data@${EMOJIBASE_VERSION}`;
|
|
7
|
-
const EMOJIBASE_EMOJIS_URL = (locale) => `${EMOJIBASE_CDN_URL}/${locale}/data.json`;
|
|
8
|
-
const EMOJIBASE_MESSAGES_URL = (locale) => `${EMOJIBASE_CDN_URL}/${locale}/messages.json`;
|
|
9
|
-
const EMOJIBASE_LOCALES = [
|
|
10
|
-
"bn",
|
|
11
|
-
"da",
|
|
12
|
-
"de",
|
|
13
|
-
"en",
|
|
14
|
-
"en-gb",
|
|
15
|
-
"es",
|
|
16
|
-
"es-mx",
|
|
17
|
-
"et",
|
|
18
|
-
"fi",
|
|
19
|
-
"fr",
|
|
20
|
-
"hi",
|
|
21
|
-
"hu",
|
|
22
|
-
"it",
|
|
23
|
-
"ja",
|
|
24
|
-
"ko",
|
|
25
|
-
"lt",
|
|
26
|
-
"ms",
|
|
27
|
-
"nb",
|
|
28
|
-
"nl",
|
|
29
|
-
"pl",
|
|
30
|
-
"pt",
|
|
31
|
-
"ru",
|
|
32
|
-
"sv",
|
|
33
|
-
"th",
|
|
34
|
-
"uk",
|
|
35
|
-
"zh",
|
|
36
|
-
"zh-hant"
|
|
37
|
-
];
|
|
38
|
-
const EMOJIBASE_DEFAULT_LOCALE = "en";
|
|
39
|
-
const CACHE_EMOJI_DATA_KEY = (locale) => `lb-emoji-data-${locale}`;
|
|
40
|
-
const CACHE_EMOJI_METADATA_KEY = (locale) => `lb-emoji-metadata-${locale}`;
|
|
41
|
-
const CACHE_EMOJI_SESSION_METADATA_KEY = "lb-emoji-metadata";
|
|
42
|
-
const EMOJI_DETECTION_CANVAS_WIDTH = 20;
|
|
43
|
-
const EMOJI_DETECTION_CANVAS_HEIGHT = 25;
|
|
44
|
-
const EMOJI_DETECTION_COUNTRY_FLAG = "\u{1F1EB}\u{1F1F7}";
|
|
45
|
-
function generateRangeIndices(start, end) {
|
|
46
|
-
const range = [];
|
|
47
|
-
for (let i = start; i <= end; i++) {
|
|
48
|
-
range.push(i);
|
|
49
|
-
}
|
|
50
|
-
return range;
|
|
51
|
-
}
|
|
52
|
-
function getStorageItem(storage, key) {
|
|
53
|
-
const item = storage.getItem(key);
|
|
54
|
-
return item ? JSON.parse(item) : null;
|
|
55
|
-
}
|
|
56
|
-
function setStorageItem(storage, key, value) {
|
|
57
|
-
storage.setItem(key, JSON.stringify(value));
|
|
58
|
-
}
|
|
59
|
-
async function fetchEtag(url) {
|
|
60
|
-
try {
|
|
61
|
-
const response = await fetch(url, { method: "HEAD" });
|
|
62
|
-
return response.headers.get("etag");
|
|
63
|
-
} catch (error) {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function getEmojibaseSupportedLocale(locale) {
|
|
68
|
-
return EMOJIBASE_LOCALES.includes(locale) ? locale : EMOJIBASE_DEFAULT_LOCALE;
|
|
69
|
-
}
|
|
70
|
-
async function fetchEmojibaseData(locale) {
|
|
71
|
-
const [{ emojis, emojisEtag }, { messages, messagesEtag }] = await Promise.all([
|
|
72
|
-
fetch(EMOJIBASE_EMOJIS_URL(locale)).then(async (response) => {
|
|
73
|
-
return {
|
|
74
|
-
emojis: await response.json(),
|
|
75
|
-
emojisEtag: response.headers.get("etag")
|
|
76
|
-
};
|
|
77
|
-
}),
|
|
78
|
-
fetch(EMOJIBASE_MESSAGES_URL(locale)).then(async (response) => {
|
|
79
|
-
return {
|
|
80
|
-
messages: await response.json(),
|
|
81
|
-
messagesEtag: response.headers.get("etag")
|
|
82
|
-
};
|
|
83
|
-
})
|
|
84
|
-
]);
|
|
85
|
-
return {
|
|
86
|
-
emojis,
|
|
87
|
-
messages,
|
|
88
|
-
emojisEtag,
|
|
89
|
-
messagesEtag
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
async function fetchEmojibaseEtags(locale) {
|
|
93
|
-
const [emojisEtag, messagesEtag] = await Promise.all([
|
|
94
|
-
fetchEtag(EMOJIBASE_EMOJIS_URL(locale)),
|
|
95
|
-
fetchEtag(EMOJIBASE_MESSAGES_URL(locale))
|
|
96
|
-
]);
|
|
97
|
-
return {
|
|
98
|
-
emojisEtag,
|
|
99
|
-
messagesEtag
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
async function fetchEmojiData(locale) {
|
|
103
|
-
const { emojis, emojisEtag, messages, messagesEtag } = await fetchEmojibaseData(locale);
|
|
104
|
-
const countryFlagsSubgroup = messages.subgroups.find(
|
|
105
|
-
(subgroup) => subgroup.key === "subdivision-flag"
|
|
106
|
-
);
|
|
107
|
-
const filteredGroups = messages.groups.filter(
|
|
108
|
-
(group) => group.key !== "component"
|
|
109
|
-
);
|
|
110
|
-
const filteredEmojis = emojis.filter((emoji) => {
|
|
111
|
-
return "group" in emoji;
|
|
112
|
-
});
|
|
113
|
-
const categories = filteredGroups.map((group) => ({
|
|
114
|
-
key: group.order,
|
|
115
|
-
name: capitalize(group.message)
|
|
116
|
-
}));
|
|
117
|
-
const skinTones = messages.skinTones.map((skinTone) => ({
|
|
118
|
-
key: skinTone.key,
|
|
119
|
-
name: capitalize(skinTone.message)
|
|
120
|
-
}));
|
|
121
|
-
const compactEmojis = filteredEmojis.map((emoji) => {
|
|
122
|
-
const compactEmoji = {
|
|
123
|
-
emoji: emoji.emoji,
|
|
124
|
-
category: emoji.group,
|
|
125
|
-
version: emoji.version,
|
|
126
|
-
name: capitalize(emoji.label),
|
|
127
|
-
tags: emoji.tags
|
|
128
|
-
};
|
|
129
|
-
if (countryFlagsSubgroup && emoji.subgroup === countryFlagsSubgroup.order) {
|
|
130
|
-
compactEmoji.countryFlag = true;
|
|
131
|
-
}
|
|
132
|
-
return compactEmoji;
|
|
133
|
-
});
|
|
134
|
-
const emojiData = {
|
|
135
|
-
emojis: compactEmojis,
|
|
136
|
-
categories,
|
|
137
|
-
skinTones
|
|
138
|
-
};
|
|
139
|
-
setStorageItem(
|
|
140
|
-
localStorage,
|
|
141
|
-
CACHE_EMOJI_DATA_KEY(locale),
|
|
142
|
-
emojiData
|
|
143
|
-
);
|
|
144
|
-
setStorageItem(
|
|
145
|
-
localStorage,
|
|
146
|
-
CACHE_EMOJI_METADATA_KEY(locale),
|
|
147
|
-
{
|
|
148
|
-
emojisEtag,
|
|
149
|
-
messagesEtag
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
return emojiData;
|
|
153
|
-
}
|
|
154
|
-
function detectEmojiSupport(canvasContext, emoji) {
|
|
155
|
-
canvasContext.clearRect(
|
|
156
|
-
0,
|
|
157
|
-
0,
|
|
158
|
-
EMOJI_DETECTION_CANVAS_WIDTH * 2,
|
|
159
|
-
EMOJI_DETECTION_CANVAS_HEIGHT
|
|
160
|
-
);
|
|
161
|
-
canvasContext.fillStyle = "#f00";
|
|
162
|
-
canvasContext.fillText(emoji, 0, 22);
|
|
163
|
-
canvasContext.fillStyle = "#00f";
|
|
164
|
-
canvasContext.fillText(emoji, EMOJI_DETECTION_CANVAS_WIDTH, 22);
|
|
165
|
-
const pixels = canvasContext.getImageData(
|
|
166
|
-
0,
|
|
167
|
-
0,
|
|
168
|
-
EMOJI_DETECTION_CANVAS_WIDTH,
|
|
169
|
-
EMOJI_DETECTION_CANVAS_HEIGHT
|
|
170
|
-
).data;
|
|
171
|
-
const pixelCount = pixels.length;
|
|
172
|
-
let i = 0;
|
|
173
|
-
for (; i < pixelCount && !pixels[i + 3]; i += 4)
|
|
174
|
-
;
|
|
175
|
-
if (i >= pixelCount) {
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
const x = EMOJI_DETECTION_CANVAS_WIDTH + i / 4 % EMOJI_DETECTION_CANVAS_WIDTH;
|
|
179
|
-
const y = Math.floor(i / 4 / EMOJI_DETECTION_CANVAS_WIDTH);
|
|
180
|
-
const pixel = canvasContext.getImageData(x, y, 1, 1).data;
|
|
181
|
-
if (pixels[i] !== pixel[0] || pixels[i + 2] !== pixel[2]) {
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
if (canvasContext.measureText(emoji).width >= EMOJI_DETECTION_CANVAS_WIDTH) {
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
function getEmojiFontFamily() {
|
|
190
|
-
try {
|
|
191
|
-
const element = document.createElement("span");
|
|
192
|
-
element.style.display = "none";
|
|
193
|
-
element.dataset.emoji = "";
|
|
194
|
-
document.body.appendChild(element);
|
|
195
|
-
const computedFontFamily = window.getComputedStyle(element).fontFamily;
|
|
196
|
-
document.body.removeChild(element);
|
|
197
|
-
return computedFontFamily;
|
|
198
|
-
} catch {
|
|
199
|
-
return EMOJI_FONT_FAMILY;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
function getEmojiSessionMetadata(emojis) {
|
|
203
|
-
const versions = /* @__PURE__ */ new Map();
|
|
204
|
-
for (const emoji of emojis) {
|
|
205
|
-
if (!versions.has(emoji.version)) {
|
|
206
|
-
versions.set(emoji.version, emoji.emoji);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
const descendingVersions = [...versions.keys()].sort((a, b) => b - a);
|
|
210
|
-
const highestVersion = descendingVersions[0] ?? 0;
|
|
211
|
-
const canvasContext = document.createElement("canvas").getContext("2d", { willReadFrequently: true });
|
|
212
|
-
if (!canvasContext) {
|
|
213
|
-
return { emojiVersion: highestVersion, countryFlags: true };
|
|
214
|
-
}
|
|
215
|
-
canvasContext.font = `${Math.floor(
|
|
216
|
-
EMOJI_DETECTION_CANVAS_HEIGHT / 2
|
|
217
|
-
)}px ${getEmojiFontFamily()}`;
|
|
218
|
-
canvasContext.textBaseline = "top";
|
|
219
|
-
canvasContext.canvas.width = EMOJI_DETECTION_CANVAS_WIDTH * 2;
|
|
220
|
-
canvasContext.canvas.height = EMOJI_DETECTION_CANVAS_HEIGHT;
|
|
221
|
-
const supportsCountryFlags = detectEmojiSupport(
|
|
222
|
-
canvasContext,
|
|
223
|
-
EMOJI_DETECTION_COUNTRY_FLAG
|
|
224
|
-
);
|
|
225
|
-
for (const version of descendingVersions) {
|
|
226
|
-
const emoji = versions.get(version);
|
|
227
|
-
const isSupported = detectEmojiSupport(canvasContext, emoji);
|
|
228
|
-
if (isSupported) {
|
|
229
|
-
return {
|
|
230
|
-
emojiVersion: version,
|
|
231
|
-
countryFlags: supportsCountryFlags
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
emojiVersion: highestVersion,
|
|
237
|
-
countryFlags: supportsCountryFlags
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
async function getEmojiData(locale) {
|
|
241
|
-
const emojibaseLocale = getEmojibaseSupportedLocale(locale);
|
|
242
|
-
const sessionMetadata = getStorageItem(
|
|
243
|
-
sessionStorage,
|
|
244
|
-
CACHE_EMOJI_SESSION_METADATA_KEY
|
|
245
|
-
);
|
|
246
|
-
const cachedData = getStorageItem(
|
|
247
|
-
localStorage,
|
|
248
|
-
CACHE_EMOJI_DATA_KEY(emojibaseLocale)
|
|
249
|
-
);
|
|
250
|
-
let data;
|
|
251
|
-
if (cachedData) {
|
|
252
|
-
if (sessionMetadata) {
|
|
253
|
-
data = cachedData;
|
|
254
|
-
} else {
|
|
255
|
-
const { emojisEtag, messagesEtag } = await fetchEmojibaseEtags(emojibaseLocale);
|
|
256
|
-
const cachedMetadata = getStorageItem(
|
|
257
|
-
localStorage,
|
|
258
|
-
CACHE_EMOJI_METADATA_KEY(emojibaseLocale)
|
|
259
|
-
);
|
|
260
|
-
if (cachedMetadata && emojisEtag === cachedMetadata.emojisEtag && messagesEtag === cachedMetadata.messagesEtag) {
|
|
261
|
-
data = cachedData;
|
|
262
|
-
} else {
|
|
263
|
-
data = await fetchEmojiData(emojibaseLocale);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
} else {
|
|
267
|
-
data = await fetchEmojiData(emojibaseLocale);
|
|
268
|
-
}
|
|
269
|
-
const newSessionMetadata = sessionMetadata ?? getEmojiSessionMetadata(data.emojis);
|
|
270
|
-
setStorageItem(
|
|
271
|
-
sessionStorage,
|
|
272
|
-
CACHE_EMOJI_SESSION_METADATA_KEY,
|
|
273
|
-
newSessionMetadata
|
|
274
|
-
);
|
|
275
|
-
const filteredEmojis = data.emojis.filter((emoji) => {
|
|
276
|
-
const isSupportedVersion = emoji.version <= newSessionMetadata.emojiVersion;
|
|
277
|
-
return emoji.countryFlag ? isSupportedVersion && newSessionMetadata.countryFlags : isSupportedVersion;
|
|
278
|
-
});
|
|
279
|
-
return {
|
|
280
|
-
emojis: filteredEmojis,
|
|
281
|
-
categories: data.categories,
|
|
282
|
-
skinTones: data.skinTones
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
function filterEmojis(emojis, search) {
|
|
286
|
-
if (!search) {
|
|
287
|
-
return emojis;
|
|
288
|
-
}
|
|
289
|
-
const searchText = search.toLowerCase().trim();
|
|
290
|
-
return emojis.filter(
|
|
291
|
-
(emoji) => emoji.name.toLowerCase().includes(searchText) || emoji.tags?.some((tag) => tag.toLowerCase().includes(searchText))
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
function generateEmojiPickerData(emojis, categories, columns) {
|
|
295
|
-
let currentIndex = 0;
|
|
296
|
-
const rows = [];
|
|
297
|
-
const indexedEmojis = emojis.map((emoji, index) => ({ ...emoji, index }));
|
|
298
|
-
const categoriesRowCounts = [];
|
|
299
|
-
const categoriesRowIndices = [];
|
|
300
|
-
const categoriesNames = [];
|
|
301
|
-
const categorizedEmojis = categories.map((category) => ({
|
|
302
|
-
...category,
|
|
303
|
-
emojis: indexedEmojis.filter((emoji) => emoji.category === category.key)
|
|
304
|
-
})).filter((category) => category.emojis.length > 0);
|
|
305
|
-
for (const category of categorizedEmojis) {
|
|
306
|
-
const categoryRows = chunk(category.emojis, columns);
|
|
307
|
-
const nextIndex = currentIndex + categoryRows.length;
|
|
308
|
-
rows.push(...categoryRows);
|
|
309
|
-
categoriesNames.push(category.name);
|
|
310
|
-
categoriesRowCounts.push(categoryRows.length);
|
|
311
|
-
categoriesRowIndices.push(
|
|
312
|
-
generateRangeIndices(currentIndex, nextIndex - 1)
|
|
313
|
-
);
|
|
314
|
-
currentIndex = nextIndex;
|
|
315
|
-
}
|
|
316
|
-
return {
|
|
317
|
-
count: emojis.length,
|
|
318
|
-
rows,
|
|
319
|
-
categories: categoriesNames,
|
|
320
|
-
categoriesRowCounts,
|
|
321
|
-
categoriesRowIndices
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
export { filterEmojis, generateEmojiPickerData, getEmojiData };
|
|
326
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/primitives/EmojiPicker/utils.ts"],"sourcesContent":["import { chunk } from \"@liveblocks/core\";\nimport type {\n Emoji as EmojibaseEmoji,\n Locale as EmojibaseLocale,\n MessagesDataset as EmojibaseMessagesDataset,\n} from \"emojibase\";\n\nimport { EMOJI_FONT_FAMILY } from \"../../constants\";\nimport { capitalize } from \"../../utils/capitalize\";\nimport type {\n Emoji,\n EmojiCategory,\n EmojiData,\n EmojiPickerData,\n EmojiPickerRow,\n} from \"./types\";\n\nconst EMOJIBASE_VERSION = \"15.3.0\";\nconst EMOJIBASE_CDN_URL = `https://cdn.jsdelivr.net/npm/emojibase-data@${EMOJIBASE_VERSION}`;\nconst EMOJIBASE_EMOJIS_URL = (locale: EmojibaseLocale) =>\n `${EMOJIBASE_CDN_URL}/${locale}/data.json`;\nconst EMOJIBASE_MESSAGES_URL = (locale: EmojibaseLocale) =>\n `${EMOJIBASE_CDN_URL}/${locale}/messages.json`;\nconst EMOJIBASE_LOCALES: EmojibaseLocale[] = [\n \"bn\",\n \"da\",\n \"de\",\n \"en\",\n \"en-gb\",\n \"es\",\n \"es-mx\",\n \"et\",\n \"fi\",\n \"fr\",\n \"hi\",\n \"hu\",\n \"it\",\n \"ja\",\n \"ko\",\n \"lt\",\n \"ms\",\n \"nb\",\n \"nl\",\n \"pl\",\n \"pt\",\n \"ru\",\n \"sv\",\n \"th\",\n \"uk\",\n \"zh\",\n \"zh-hant\",\n];\nconst EMOJIBASE_DEFAULT_LOCALE: EmojibaseLocale = \"en\";\n\nconst CACHE_EMOJI_DATA_KEY = (locale: string) => `lb-emoji-data-${locale}`;\nconst CACHE_EMOJI_METADATA_KEY = (locale: string) =>\n `lb-emoji-metadata-${locale}`;\nconst CACHE_EMOJI_SESSION_METADATA_KEY = \"lb-emoji-metadata\";\n\nconst EMOJI_DETECTION_CANVAS_WIDTH = 20;\nconst EMOJI_DETECTION_CANVAS_HEIGHT = 25;\nconst EMOJI_DETECTION_COUNTRY_FLAG = \"🇫🇷\";\n\ntype EmojiMetadata = {\n emojisEtag: string | null;\n messagesEtag: string | null;\n};\n\ntype EmojiSessionMetadata = {\n emojiVersion: number;\n countryFlags: boolean;\n};\n\nfunction generateRangeIndices(start: number, end: number) {\n const range: number[] = [];\n\n for (let i = start; i <= end; i++) {\n range.push(i);\n }\n\n return range;\n}\n\nfunction getStorageItem<T>(storage: Storage, key: string) {\n const item = storage.getItem(key);\n\n return item ? (JSON.parse(item) as T) : null;\n}\n\nfunction setStorageItem<T>(storage: Storage, key: string, value: T) {\n storage.setItem(key, JSON.stringify(value));\n}\n\nasync function fetchEtag(url: string) {\n try {\n const response = await fetch(url, { method: \"HEAD\" });\n\n return response.headers.get(\"etag\");\n } catch (error) {\n return null;\n }\n}\n\nfunction getEmojibaseSupportedLocale(locale: string): EmojibaseLocale {\n return EMOJIBASE_LOCALES.includes(locale as EmojibaseLocale)\n ? (locale as EmojibaseLocale)\n : EMOJIBASE_DEFAULT_LOCALE;\n}\n\nasync function fetchEmojibaseData(locale: EmojibaseLocale) {\n const [{ emojis, emojisEtag }, { messages, messagesEtag }] =\n await Promise.all([\n fetch(EMOJIBASE_EMOJIS_URL(locale)).then(async (response) => {\n return {\n emojis: (await response.json()) as EmojibaseEmoji[],\n emojisEtag: response.headers.get(\"etag\"),\n };\n }),\n fetch(EMOJIBASE_MESSAGES_URL(locale)).then(async (response) => {\n return {\n messages: (await response.json()) as EmojibaseMessagesDataset,\n messagesEtag: response.headers.get(\"etag\"),\n };\n }),\n ]);\n\n return {\n emojis,\n messages,\n emojisEtag,\n messagesEtag,\n };\n}\n\nasync function fetchEmojibaseEtags(locale: EmojibaseLocale) {\n const [emojisEtag, messagesEtag] = await Promise.all([\n fetchEtag(EMOJIBASE_EMOJIS_URL(locale)),\n fetchEtag(EMOJIBASE_MESSAGES_URL(locale)),\n ]);\n\n return {\n emojisEtag,\n messagesEtag,\n };\n}\n\nasync function fetchEmojiData(locale: EmojibaseLocale): Promise<EmojiData> {\n const { emojis, emojisEtag, messages, messagesEtag } =\n await fetchEmojibaseData(locale);\n const countryFlagsSubgroup = messages.subgroups.find(\n (subgroup) => subgroup.key === \"subdivision-flag\"\n );\n\n // Filter out component/modifier category and emojis\n const filteredGroups = messages.groups.filter(\n (group) => group.key !== \"component\"\n );\n const filteredEmojis = emojis.filter((emoji) => {\n return \"group\" in emoji;\n });\n\n // Pick and compact the data\n const categories = filteredGroups.map((group) => ({\n key: group.order,\n name: capitalize(group.message),\n }));\n const skinTones = messages.skinTones.map((skinTone) => ({\n key: skinTone.key,\n name: capitalize(skinTone.message),\n }));\n const compactEmojis = filteredEmojis.map((emoji) => {\n const compactEmoji: Emoji = {\n emoji: emoji.emoji,\n category: emoji.group!,\n version: emoji.version,\n name: capitalize(emoji.label),\n tags: emoji.tags,\n };\n\n if (countryFlagsSubgroup && emoji.subgroup === countryFlagsSubgroup.order) {\n compactEmoji.countryFlag = true;\n }\n\n return compactEmoji;\n });\n\n const emojiData = {\n emojis: compactEmojis,\n categories,\n skinTones,\n };\n\n // Cache the data and metadata\n setStorageItem<EmojiData>(\n localStorage,\n CACHE_EMOJI_DATA_KEY(locale),\n emojiData\n );\n setStorageItem<EmojiMetadata>(\n localStorage,\n CACHE_EMOJI_METADATA_KEY(locale),\n {\n emojisEtag,\n messagesEtag,\n }\n );\n\n return emojiData;\n}\n\n// Adapted from https://github.com/koala-interactive/is-emoji-supported/tree/master\nfunction detectEmojiSupport(\n canvasContext: CanvasRenderingContext2D,\n emoji: string\n): boolean {\n canvasContext.clearRect(\n 0,\n 0,\n EMOJI_DETECTION_CANVAS_WIDTH * 2,\n EMOJI_DETECTION_CANVAS_HEIGHT\n );\n\n // Draw in red on the left\n canvasContext.fillStyle = \"#f00\";\n canvasContext.fillText(emoji, 0, 22);\n\n // Draw in blue on right\n canvasContext.fillStyle = \"#00f\";\n canvasContext.fillText(emoji, EMOJI_DETECTION_CANVAS_WIDTH, 22);\n\n const pixels = canvasContext.getImageData(\n 0,\n 0,\n EMOJI_DETECTION_CANVAS_WIDTH,\n EMOJI_DETECTION_CANVAS_HEIGHT\n ).data;\n const pixelCount = pixels.length;\n let i = 0;\n\n // Search for the first visible pixel\n for (; i < pixelCount && !pixels[i + 3]; i += 4);\n\n // No visible pixel\n if (i >= pixelCount) {\n return false;\n }\n\n // Emojis have an immutable color, so we check the color of the emoji in two\n // different colors, the result should be the same\n const x =\n EMOJI_DETECTION_CANVAS_WIDTH + ((i / 4) % EMOJI_DETECTION_CANVAS_WIDTH);\n const y = Math.floor(i / 4 / EMOJI_DETECTION_CANVAS_WIDTH);\n const pixel = canvasContext.getImageData(x, y, 1, 1).data;\n\n if (pixels[i] !== pixel[0] || pixels[i + 2] !== pixel[2]) {\n return false;\n }\n\n // Unsupported ZWJ sequence emojis show up as separate emojis\n if (canvasContext.measureText(emoji).width >= EMOJI_DETECTION_CANVAS_WIDTH) {\n return false;\n }\n\n return true;\n}\n\nfunction getEmojiFontFamily() {\n try {\n const element = document.createElement(\"span\");\n element.style.display = \"none\";\n element.dataset.emoji = \"\";\n\n document.body.appendChild(element);\n\n const computedFontFamily = window.getComputedStyle(element).fontFamily;\n\n document.body.removeChild(element);\n\n return computedFontFamily;\n } catch {\n return EMOJI_FONT_FAMILY;\n }\n}\n\nfunction getEmojiSessionMetadata(emojis: Emoji[]): EmojiSessionMetadata {\n const versions = new Map<number, string>();\n\n for (const emoji of emojis) {\n if (!versions.has(emoji.version)) {\n versions.set(emoji.version, emoji.emoji);\n }\n }\n\n const descendingVersions = [...versions.keys()].sort((a, b) => b - a);\n const highestVersion = descendingVersions[0] ?? 0;\n\n const canvasContext = document\n .createElement(\"canvas\")\n .getContext(\"2d\", { willReadFrequently: true });\n\n if (!canvasContext) {\n return { emojiVersion: highestVersion, countryFlags: true };\n }\n\n canvasContext.font = `${Math.floor(\n EMOJI_DETECTION_CANVAS_HEIGHT / 2\n )}px ${getEmojiFontFamily()}`;\n canvasContext.textBaseline = \"top\";\n canvasContext.canvas.width = EMOJI_DETECTION_CANVAS_WIDTH * 2;\n canvasContext.canvas.height = EMOJI_DETECTION_CANVAS_HEIGHT;\n\n const supportsCountryFlags = detectEmojiSupport(\n canvasContext,\n EMOJI_DETECTION_COUNTRY_FLAG\n );\n\n for (const version of descendingVersions) {\n const emoji = versions.get(version)!;\n const isSupported = detectEmojiSupport(canvasContext, emoji);\n\n if (isSupported) {\n return {\n emojiVersion: version,\n countryFlags: supportsCountryFlags,\n };\n }\n }\n\n return {\n emojiVersion: highestVersion,\n countryFlags: supportsCountryFlags,\n };\n}\n\nexport async function getEmojiData(locale: string): Promise<EmojiData> {\n const emojibaseLocale = getEmojibaseSupportedLocale(locale);\n\n const sessionMetadata = getStorageItem<EmojiSessionMetadata>(\n sessionStorage,\n CACHE_EMOJI_SESSION_METADATA_KEY\n );\n const cachedData = getStorageItem<EmojiData>(\n localStorage,\n CACHE_EMOJI_DATA_KEY(emojibaseLocale)\n );\n let data: EmojiData;\n\n // If there is data already cached, check if the ETags are the same.\n // If they are, return the cached data, otherwise fetch it again.\n if (cachedData) {\n // ETags only need to be checked once per session\n if (sessionMetadata) {\n data = cachedData;\n } else {\n const { emojisEtag, messagesEtag } =\n await fetchEmojibaseEtags(emojibaseLocale);\n const cachedMetadata = getStorageItem<EmojiMetadata>(\n localStorage,\n CACHE_EMOJI_METADATA_KEY(emojibaseLocale)\n );\n\n if (\n cachedMetadata &&\n emojisEtag === cachedMetadata.emojisEtag &&\n messagesEtag === cachedMetadata.messagesEtag\n ) {\n data = cachedData;\n } else {\n data = await fetchEmojiData(emojibaseLocale);\n }\n }\n } else {\n data = await fetchEmojiData(emojibaseLocale);\n }\n\n const newSessionMetadata =\n sessionMetadata ?? getEmojiSessionMetadata(data.emojis);\n setStorageItem(\n sessionStorage,\n CACHE_EMOJI_SESSION_METADATA_KEY,\n newSessionMetadata\n );\n\n // Filter out unsupported emojis\n const filteredEmojis = data.emojis.filter((emoji) => {\n const isSupportedVersion = emoji.version <= newSessionMetadata.emojiVersion;\n\n return emoji.countryFlag\n ? isSupportedVersion && newSessionMetadata.countryFlags\n : isSupportedVersion;\n });\n\n return {\n emojis: filteredEmojis,\n categories: data.categories,\n skinTones: data.skinTones,\n };\n}\n\nexport function filterEmojis(emojis: Emoji[], search?: string) {\n if (!search) {\n return emojis;\n }\n\n const searchText = search.toLowerCase().trim();\n\n return emojis.filter(\n (emoji) =>\n emoji.name.toLowerCase().includes(searchText) ||\n emoji.tags?.some((tag) => tag.toLowerCase().includes(searchText))\n );\n}\n\nexport function generateEmojiPickerData(\n emojis: Emoji[],\n categories: EmojiCategory[],\n columns: number\n): EmojiPickerData {\n let currentIndex = 0;\n const rows: EmojiPickerRow[] = [];\n const indexedEmojis = emojis.map((emoji, index) => ({ ...emoji, index }));\n const categoriesRowCounts: number[] = [];\n const categoriesRowIndices: number[][] = [];\n const categoriesNames: string[] = [];\n const categorizedEmojis = categories\n .map((category) => ({\n ...category,\n emojis: indexedEmojis.filter((emoji) => emoji.category === category.key),\n }))\n .filter((category) => category.emojis.length > 0);\n\n for (const category of categorizedEmojis) {\n const categoryRows = chunk(category.emojis, columns);\n const nextIndex = currentIndex + categoryRows.length;\n\n rows.push(...categoryRows);\n categoriesNames.push(category.name);\n categoriesRowCounts.push(categoryRows.length);\n categoriesRowIndices.push(\n generateRangeIndices(currentIndex, nextIndex - 1)\n );\n currentIndex = nextIndex;\n }\n\n return {\n count: emojis.length,\n rows,\n categories: categoriesNames,\n categoriesRowCounts,\n categoriesRowIndices,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const IDLE_CALLBACK_FALLBACK_TIMEOUT = 100;
|
|
4
|
-
function requestIdleCallbackFallback(callback, options) {
|
|
5
|
-
return setTimeout(
|
|
6
|
-
callback,
|
|
7
|
-
Math.min(options?.timeout ?? Infinity, IDLE_CALLBACK_FALLBACK_TIMEOUT)
|
|
8
|
-
);
|
|
9
|
-
}
|
|
10
|
-
const requestIdleCallback = (typeof window !== "undefined" ? window.requestIdleCallback : null) ?? requestIdleCallbackFallback;
|
|
11
|
-
const cancelIdleCallback = (typeof window !== "undefined" ? window.cancelIdleCallback : null) ?? clearTimeout;
|
|
12
|
-
|
|
13
|
-
exports.cancelIdleCallback = cancelIdleCallback;
|
|
14
|
-
exports.requestIdleCallback = requestIdleCallback;
|
|
15
|
-
//# sourceMappingURL=request-idle-callback.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-idle-callback.cjs","sources":["../../src/utils/request-idle-callback.ts"],"sourcesContent":["const IDLE_CALLBACK_FALLBACK_TIMEOUT = 100;\n\nfunction requestIdleCallbackFallback(\n callback: IdleRequestCallback,\n options?: IdleRequestOptions\n) {\n return setTimeout(\n callback,\n Math.min(options?.timeout ?? Infinity, IDLE_CALLBACK_FALLBACK_TIMEOUT)\n );\n}\n\n/**\n * Ponyfill for `window.requestIdleCallback`.\n */\nexport const requestIdleCallback: typeof window.requestIdleCallback =\n (typeof window !== \"undefined\" ? window.requestIdleCallback : null) ??\n requestIdleCallbackFallback;\n\n/**\n * Ponyfill for `window.cancelIdleCallback`.\n */\nexport const cancelIdleCallback: typeof window.cancelIdleCallback =\n (typeof window !== \"undefined\" ? window.cancelIdleCallback : null) ??\n clearTimeout;\n"],"names":[],"mappings":";;AAAA,MAAM,8BAAiC,GAAA,GAAA,CAAA;AAEvC,SAAS,2BAAA,CACP,UACA,OACA,EAAA;AACA,EAAO,OAAA,UAAA;AAAA,IACL,QAAA;AAAA,IACA,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,OAAA,IAAW,UAAU,8BAA8B,CAAA;AAAA,GACvE,CAAA;AACF,CAAA;AAKO,MAAM,uBACV,OAAO,MAAA,KAAW,WAAc,GAAA,MAAA,CAAO,sBAAsB,IAC9D,KAAA,4BAAA;AAKK,MAAM,sBACV,OAAO,MAAA,KAAW,WAAc,GAAA,MAAA,CAAO,qBAAqB,IAC7D,KAAA;;;;;"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
const IDLE_CALLBACK_FALLBACK_TIMEOUT = 100;
|
|
2
|
-
function requestIdleCallbackFallback(callback, options) {
|
|
3
|
-
return setTimeout(
|
|
4
|
-
callback,
|
|
5
|
-
Math.min(options?.timeout ?? Infinity, IDLE_CALLBACK_FALLBACK_TIMEOUT)
|
|
6
|
-
);
|
|
7
|
-
}
|
|
8
|
-
const requestIdleCallback = (typeof window !== "undefined" ? window.requestIdleCallback : null) ?? requestIdleCallbackFallback;
|
|
9
|
-
const cancelIdleCallback = (typeof window !== "undefined" ? window.cancelIdleCallback : null) ?? clearTimeout;
|
|
10
|
-
|
|
11
|
-
export { cancelIdleCallback, requestIdleCallback };
|
|
12
|
-
//# sourceMappingURL=request-idle-callback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-idle-callback.js","sources":["../../src/utils/request-idle-callback.ts"],"sourcesContent":["const IDLE_CALLBACK_FALLBACK_TIMEOUT = 100;\n\nfunction requestIdleCallbackFallback(\n callback: IdleRequestCallback,\n options?: IdleRequestOptions\n) {\n return setTimeout(\n callback,\n Math.min(options?.timeout ?? Infinity, IDLE_CALLBACK_FALLBACK_TIMEOUT)\n );\n}\n\n/**\n * Ponyfill for `window.requestIdleCallback`.\n */\nexport const requestIdleCallback: typeof window.requestIdleCallback =\n (typeof window !== \"undefined\" ? window.requestIdleCallback : null) ??\n requestIdleCallbackFallback;\n\n/**\n * Ponyfill for `window.cancelIdleCallback`.\n */\nexport const cancelIdleCallback: typeof window.cancelIdleCallback =\n (typeof window !== \"undefined\" ? window.cancelIdleCallback : null) ??\n clearTimeout;\n"],"names":[],"mappings":"AAAA,MAAM,8BAAiC,GAAA,GAAA,CAAA;AAEvC,SAAS,2BAAA,CACP,UACA,OACA,EAAA;AACA,EAAO,OAAA,UAAA;AAAA,IACL,QAAA;AAAA,IACA,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,OAAA,IAAW,UAAU,8BAA8B,CAAA;AAAA,GACvE,CAAA;AACF,CAAA;AAKO,MAAM,uBACV,OAAO,MAAA,KAAW,WAAc,GAAA,MAAA,CAAO,sBAAsB,IAC9D,KAAA,4BAAA;AAKK,MAAM,sBACV,OAAO,MAAA,KAAW,WAAc,GAAA,MAAA,CAAO,qBAAqB,IAC7D,KAAA;;;;"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const visuallyHidden = {
|
|
4
|
-
position: "absolute",
|
|
5
|
-
border: 0,
|
|
6
|
-
width: 1,
|
|
7
|
-
height: 1,
|
|
8
|
-
padding: 0,
|
|
9
|
-
margin: -1,
|
|
10
|
-
overflow: "hidden",
|
|
11
|
-
clip: "rect(0, 0, 0, 0)",
|
|
12
|
-
whiteSpace: "nowrap",
|
|
13
|
-
wordWrap: "normal"
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
exports.visuallyHidden = visuallyHidden;
|
|
17
|
-
//# sourceMappingURL=visually-hidden.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visually-hidden.cjs","sources":["../../src/utils/visually-hidden.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\nexport const visuallyHidden: CSSProperties = {\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n};\n"],"names":[],"mappings":";;AAEO,MAAM,cAAgC,GAAA;AAAA,EAC3C,QAAU,EAAA,UAAA;AAAA,EACV,MAAQ,EAAA,CAAA;AAAA,EACR,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,CAAA;AAAA,EACR,OAAS,EAAA,CAAA;AAAA,EACT,MAAQ,EAAA,CAAA,CAAA;AAAA,EACR,QAAU,EAAA,QAAA;AAAA,EACV,IAAM,EAAA,kBAAA;AAAA,EACN,UAAY,EAAA,QAAA;AAAA,EACZ,QAAU,EAAA,QAAA;AACZ;;;;"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const visuallyHidden = {
|
|
2
|
-
position: "absolute",
|
|
3
|
-
border: 0,
|
|
4
|
-
width: 1,
|
|
5
|
-
height: 1,
|
|
6
|
-
padding: 0,
|
|
7
|
-
margin: -1,
|
|
8
|
-
overflow: "hidden",
|
|
9
|
-
clip: "rect(0, 0, 0, 0)",
|
|
10
|
-
whiteSpace: "nowrap",
|
|
11
|
-
wordWrap: "normal"
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export { visuallyHidden };
|
|
15
|
-
//# sourceMappingURL=visually-hidden.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visually-hidden.js","sources":["../../src/utils/visually-hidden.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\nexport const visuallyHidden: CSSProperties = {\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n};\n"],"names":[],"mappings":"AAEO,MAAM,cAAgC,GAAA;AAAA,EAC3C,QAAU,EAAA,UAAA;AAAA,EACV,MAAQ,EAAA,CAAA;AAAA,EACR,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,CAAA;AAAA,EACR,OAAS,EAAA,CAAA;AAAA,EACT,MAAQ,EAAA,CAAA,CAAA;AAAA,EACR,QAAU,EAAA,QAAA;AAAA,EACV,IAAM,EAAA,kBAAA;AAAA,EACN,UAAY,EAAA,QAAA;AAAA,EACZ,QAAU,EAAA,QAAA;AACZ;;;;"}
|