@dialpad/dialtone
Version:
Dialpad's Dialtone design system monorepo
167 lines (166 loc) • 5.58 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const regexCombinedEmojis = require("regex-combined-emojis");
const emojiJsonLocal = require("emoji-toolkit/emoji_strategy.json");
const emojiRegex = new RegExp(regexCombinedEmojis.emojiPattern, "g");
const emojiVersion = "8.0";
const defaultEmojiAssetUrl = "https://cdn.jsdelivr.net/joypixels/assets/" + emojiVersion + "/png/unicode/32/";
exports.customEmojiAssetUrl = null;
exports.emojiImageUrlSmall = defaultEmojiAssetUrl;
exports.emojiFileExtensionSmall = ".png";
exports.emojiImageUrlLarge = defaultEmojiAssetUrl;
exports.emojiFileExtensionLarge = ".png";
const emojiJson = emojiJsonLocal;
const emojiShortCodeRegex = new RegExp("(^| |(?<=:))(:\\w+:)", "g");
function getEmojiData() {
return emojiJson;
}
function setEmojiAssetUrlSmall(url, fileExtension = ".png") {
if (!url.endsWith("/")) {
url = url + "/";
}
exports.emojiImageUrlSmall = url;
exports.emojiFileExtensionSmall = fileExtension;
}
function setEmojiAssetUrlLarge(url, fileExtension = ".svg") {
if (!url.endsWith("/")) {
url = url + "/";
}
exports.emojiImageUrlLarge = url;
exports.emojiFileExtensionLarge = fileExtension;
}
function setCustomEmojiUrl(url) {
exports.customEmojiAssetUrl = url;
}
function setCustomEmojiJson(json) {
validateCustomEmojiJson(json);
}
function validateCustomEmojiJson(json) {
const customEmojiProps = ["extension", "custom"];
const customEmojiRequiredProps = [
"name",
"category",
"shortname",
"extension",
"custom"
];
const _updateNativeEmojiData = (emojiData, propName, propValue) => {
if (emojiData[propName] === void 0) {
if (!customEmojiProps.includes(propName)) {
return;
}
emojiData[propName] = propValue;
} else {
if (Array.isArray(emojiData[propName])) {
emojiData[propName] = emojiData[propName].concat(propValue);
} else {
emojiData[propName] = propValue;
}
}
};
Object.entries(json).forEach((item) => {
const [customEmojiKey, customEmojiValue] = item;
if (customEmojiKey in emojiJson) {
const emojiData = emojiJson[customEmojiKey];
for (const customEmojiPropertyName in customEmojiValue) {
const customEmojiPropertyValue = customEmojiValue[customEmojiPropertyName];
_updateNativeEmojiData(emojiData, customEmojiPropertyName, customEmojiPropertyValue);
}
} else {
const _validateRequiredProps = () => customEmojiRequiredProps.every((val) => {
return customEmojiValue[val] !== void 0;
});
if (_validateRequiredProps()) {
emojiJson[customEmojiKey] = customEmojiValue;
} else {
console.error(
"The following custom emoji doesn't contain the required properties:",
customEmojiValue
);
}
}
});
}
function shortcodeToEmojiData(shortcode) {
function f(o, key) {
if (!o || typeof o !== "object") {
return;
}
if ("shortname" in o) {
if (o.shortname === shortcode || o.shortname_alternates.includes(shortcode)) {
o.key = key;
reference = o;
return true;
}
}
Object.keys(o).some(function(k) {
return f(o[k], k);
});
}
let reference;
f(getEmojiData(), null);
return reference;
}
function unicodeToString(emoji) {
let key = "";
for (const codePoint of emoji) {
const codepoint = codePoint.codePointAt(0).toString(16).padStart(4, "0");
if (["200d", "fe0f"].includes(codepoint)) continue;
if (key !== "") {
key = key + "-";
}
key = key + codepoint;
}
return key;
}
function stringToUnicode(str) {
const uChars = str.split("-");
let result = "";
uChars.forEach((uChar) => {
result = result + String.fromCodePoint(parseInt(uChar, 16));
});
return result;
}
function codeToEmojiData(code) {
code = code == null ? void 0 : code.trim();
if (code.startsWith(":") && code.endsWith(":")) {
return shortcodeToEmojiData(code);
} else {
const unicodeString = unicodeToString(code);
const result = emojiJson[unicodeString];
if (result) result.key = unicodeString;
return result;
}
}
function findShortCodes(textContent) {
const shortcodes = (textContent.match(emojiShortCodeRegex) || []).map((code) => code.trim());
return filterValidShortCodes(shortcodes);
}
function filterValidShortCodes(shortcodes) {
const filtered = shortcodes ? shortcodes.filter((code) => shortcodeToEmojiData(code)) : [];
return new Set(filtered);
}
function findEmojis(textContent) {
const matches = [...textContent.matchAll(emojiRegex)];
const emojis = matches.length ? matches.map((match) => match[0]) : [];
return new Set(emojis);
}
exports.codeToEmojiData = codeToEmojiData;
exports.defaultEmojiAssetUrl = defaultEmojiAssetUrl;
exports.emojiJson = emojiJson;
exports.emojiRegex = emojiRegex;
exports.emojiShortCodeRegex = emojiShortCodeRegex;
exports.emojiVersion = emojiVersion;
exports.filterValidShortCodes = filterValidShortCodes;
exports.findEmojis = findEmojis;
exports.findShortCodes = findShortCodes;
exports.getEmojiData = getEmojiData;
exports.setCustomEmojiJson = setCustomEmojiJson;
exports.setCustomEmojiUrl = setCustomEmojiUrl;
exports.setEmojiAssetUrlLarge = setEmojiAssetUrlLarge;
exports.setEmojiAssetUrlSmall = setEmojiAssetUrlSmall;
exports.shortcodeToEmojiData = shortcodeToEmojiData;
exports.stringToUnicode = stringToUnicode;
exports.unicodeToString = unicodeToString;
exports.validateCustomEmojiJson = validateCustomEmojiJson;
//# sourceMappingURL=emoji.cjs.map