react-emoji-text 1.0.0-alpha.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/LICENSE +21 -0
- package/README.md +408 -0
- package/dist/adapters/emoji-mart.cjs +9 -0
- package/dist/adapters/emoji-mart.d.cts +7 -0
- package/dist/adapters/emoji-mart.d.cts.map +1 -0
- package/dist/adapters/emoji-mart.d.mts +7 -0
- package/dist/adapters/emoji-mart.d.mts.map +1 -0
- package/dist/adapters/emoji-mart.mjs +10 -0
- package/dist/adapters/emoji-mart.mjs.map +1 -0
- package/dist/adapters/emojibase.cjs +71 -0
- package/dist/adapters/emojibase.d.cts +38 -0
- package/dist/adapters/emojibase.d.cts.map +1 -0
- package/dist/adapters/emojibase.d.mts +38 -0
- package/dist/adapters/emojibase.d.mts.map +1 -0
- package/dist/adapters/emojibase.mjs +72 -0
- package/dist/adapters/emojibase.mjs.map +1 -0
- package/dist/compat/index.cjs +93 -0
- package/dist/compat/index.d.cts +32 -0
- package/dist/compat/index.d.cts.map +1 -0
- package/dist/compat/index.d.mts +32 -0
- package/dist/compat/index.d.mts.map +1 -0
- package/dist/compat/index.mjs +90 -0
- package/dist/compat/index.mjs.map +1 -0
- package/dist/core.cjs +10 -0
- package/dist/core.d.cts +4 -0
- package/dist/core.d.mts +4 -0
- package/dist/core.mjs +2 -0
- package/dist/index-B39vk6JI.d.mts +23 -0
- package/dist/index-B39vk6JI.d.mts.map +1 -0
- package/dist/index-DPd10zCJ.d.cts +23 -0
- package/dist/index-DPd10zCJ.d.cts.map +1 -0
- package/dist/index-DXKnU6tZ.d.cts +398 -0
- package/dist/index-DXKnU6tZ.d.cts.map +1 -0
- package/dist/index-UT6qWHp1.d.mts +398 -0
- package/dist/index-UT6qWHp1.d.mts.map +1 -0
- package/dist/index.cjs +18 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +5 -0
- package/dist/indexes-3fK5ySH8.d.cts +20 -0
- package/dist/indexes-3fK5ySH8.d.cts.map +1 -0
- package/dist/indexes-BMCSN-X0.d.mts +20 -0
- package/dist/indexes-BMCSN-X0.d.mts.map +1 -0
- package/dist/react/index.cjs +8 -0
- package/dist/react/index.d.cts +2 -0
- package/dist/react/index.d.mts +2 -0
- package/dist/react/index.mjs +3 -0
- package/dist/react-9EdWn0Gg.mjs +196 -0
- package/dist/react-9EdWn0Gg.mjs.map +1 -0
- package/dist/react-C8xGkPhi.cjs +211 -0
- package/dist/render-C7VPZ7if.cjs +140 -0
- package/dist/render-DzloPAWX.mjs +119 -0
- package/dist/render-DzloPAWX.mjs.map +1 -0
- package/dist/tokenize-BUKMZ9Yg.mjs +313 -0
- package/dist/tokenize-BUKMZ9Yg.mjs.map +1 -0
- package/dist/tokenize-CyKMb3O9.cjs +364 -0
- package/dist/types-Dyzdpq-R.d.cts +92 -0
- package/dist/types-Dyzdpq-R.d.cts.map +1 -0
- package/dist/types-o0mRO30y.d.mts +92 -0
- package/dist/types-o0mRO30y.d.mts.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//#region src/adapters/emojibase.ts
|
|
2
|
+
const GROUP_NAMES = {
|
|
3
|
+
0: "smileys-emotion",
|
|
4
|
+
1: "people-body",
|
|
5
|
+
2: "component",
|
|
6
|
+
3: "animals-nature",
|
|
7
|
+
4: "food-drink",
|
|
8
|
+
5: "travel-places",
|
|
9
|
+
6: "activities",
|
|
10
|
+
7: "objects",
|
|
11
|
+
8: "symbols",
|
|
12
|
+
9: "flags"
|
|
13
|
+
};
|
|
14
|
+
function getNative(entry) {
|
|
15
|
+
return "emoji" in entry ? entry.emoji : entry.unicode;
|
|
16
|
+
}
|
|
17
|
+
function resolveShortcodes(hexcode, shortcodesMap) {
|
|
18
|
+
if (!shortcodesMap) return [];
|
|
19
|
+
const value = shortcodesMap[hexcode];
|
|
20
|
+
if (!value) return [];
|
|
21
|
+
return Array.isArray(value) ? value : [value];
|
|
22
|
+
}
|
|
23
|
+
function toSkin(entry) {
|
|
24
|
+
return {
|
|
25
|
+
unified: entry.hexcode,
|
|
26
|
+
native: getNative(entry)
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function fromEmojibase(emojis, options) {
|
|
30
|
+
const shortcodesMap = options?.shortcodes;
|
|
31
|
+
const emojiRecord = {};
|
|
32
|
+
const aliases = {};
|
|
33
|
+
const categoryBuckets = /* @__PURE__ */ new Map();
|
|
34
|
+
for (const raw of emojis) {
|
|
35
|
+
const codes = resolveShortcodes(raw.hexcode, shortcodesMap);
|
|
36
|
+
const emojiId = codes[0] ?? raw.hexcode;
|
|
37
|
+
const skins = [toSkin(raw)];
|
|
38
|
+
if (raw.skins) for (const skinVariant of raw.skins) skins.push(toSkin(skinVariant));
|
|
39
|
+
const entryAliases = codes.length > 1 ? codes.slice(1) : void 0;
|
|
40
|
+
emojiRecord[emojiId] = {
|
|
41
|
+
id: emojiId,
|
|
42
|
+
name: raw.label,
|
|
43
|
+
keywords: raw.tags ?? [],
|
|
44
|
+
skins,
|
|
45
|
+
aliases: entryAliases
|
|
46
|
+
};
|
|
47
|
+
if (entryAliases) for (const alias of entryAliases) aliases[alias] = emojiId;
|
|
48
|
+
const emoticons = raw.emoticon ? Array.isArray(raw.emoticon) ? raw.emoticon : [raw.emoticon] : [];
|
|
49
|
+
for (const emoticon of emoticons) aliases[emoticon] = emojiId;
|
|
50
|
+
if (raw.group !== void 0) {
|
|
51
|
+
const categoryName = GROUP_NAMES[raw.group] ?? `group-${String(raw.group)}`;
|
|
52
|
+
let bucket = categoryBuckets.get(categoryName);
|
|
53
|
+
if (!bucket) {
|
|
54
|
+
bucket = [];
|
|
55
|
+
categoryBuckets.set(categoryName, bucket);
|
|
56
|
+
}
|
|
57
|
+
bucket.push(emojiId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
emojis: emojiRecord,
|
|
62
|
+
aliases,
|
|
63
|
+
categories: Array.from(categoryBuckets, ([id, emojiIds]) => ({
|
|
64
|
+
id,
|
|
65
|
+
emojis: emojiIds
|
|
66
|
+
}))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { fromEmojibase };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=emojibase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emojibase.mjs","names":[],"sources":["../../src/adapters/emojibase.ts"],"sourcesContent":["import type { EmojiData, EmojiEntry, EmojiSkin } from '../core/types';\nimport type { EmojibaseCompactEmoji, EmojibaseEmoji, EmojibaseShortcodes } from './types';\n\nconst GROUP_NAMES: Record<number, string> = {\n 0: 'smileys-emotion',\n 1: 'people-body',\n 2: 'component',\n 3: 'animals-nature',\n 4: 'food-drink',\n 5: 'travel-places',\n 6: 'activities',\n 7: 'objects',\n 8: 'symbols',\n 9: 'flags',\n};\n\ninterface FromEmojibaseOptions {\n shortcodes?: EmojibaseShortcodes;\n}\n\nfunction getNative(entry: EmojibaseEmoji | EmojibaseCompactEmoji): string {\n return 'emoji' in entry ? entry.emoji : (entry as EmojibaseCompactEmoji).unicode;\n}\n\nfunction resolveShortcodes(\n hexcode: string,\n shortcodesMap: EmojibaseShortcodes | undefined,\n): string[] {\n if (!shortcodesMap) return [];\n const value = shortcodesMap[hexcode];\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction toSkin(entry: EmojibaseEmoji | EmojibaseCompactEmoji): EmojiSkin {\n return {\n unified: entry.hexcode,\n native: getNative(entry),\n };\n}\n\nexport function fromEmojibase(\n emojis: EmojibaseEmoji[] | EmojibaseCompactEmoji[],\n options?: FromEmojibaseOptions,\n): EmojiData {\n const shortcodesMap = options?.shortcodes;\n const emojiRecord: Record<string, EmojiEntry> = {};\n const aliases: Record<string, string> = {};\n const categoryBuckets = new Map<string, string[]>();\n\n for (const raw of emojis) {\n const codes = resolveShortcodes(raw.hexcode, shortcodesMap);\n const emojiId = codes[0] ?? raw.hexcode;\n\n const skins: EmojiSkin[] = [toSkin(raw)];\n if (raw.skins) {\n for (const skinVariant of raw.skins) {\n skins.push(toSkin(skinVariant));\n }\n }\n\n const entryAliases = codes.length > 1 ? codes.slice(1) : undefined;\n\n emojiRecord[emojiId] = {\n id: emojiId,\n name: raw.label,\n keywords: raw.tags ?? [],\n skins,\n aliases: entryAliases,\n };\n\n if (entryAliases) {\n for (const alias of entryAliases) {\n aliases[alias] = emojiId;\n }\n }\n\n const emoticons = raw.emoticon\n ? Array.isArray(raw.emoticon)\n ? raw.emoticon\n : [raw.emoticon]\n : [];\n for (const emoticon of emoticons) {\n aliases[emoticon] = emojiId;\n }\n\n if (raw.group !== undefined) {\n const categoryName = GROUP_NAMES[raw.group] ?? `group-${String(raw.group)}`;\n let bucket = categoryBuckets.get(categoryName);\n if (!bucket) {\n bucket = [];\n categoryBuckets.set(categoryName, bucket);\n }\n bucket.push(emojiId);\n }\n }\n\n const categories = Array.from(categoryBuckets, ([id, emojiIds]) => ({\n id,\n emojis: emojiIds,\n }));\n\n return { emojis: emojiRecord, aliases, categories };\n}\n"],"mappings":";AAGA,MAAM,cAAsC;CAC1C,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAMD,SAAS,UAAU,OAAuD;AACxE,QAAO,WAAW,QAAQ,MAAM,QAAS,MAAgC;;AAG3E,SAAS,kBACP,SACA,eACU;AACV,KAAI,CAAC,cAAe,QAAO,EAAE;CAC7B,MAAM,QAAQ,cAAc;AAC5B,KAAI,CAAC,MAAO,QAAO,EAAE;AACrB,QAAO,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM;;AAG/C,SAAS,OAAO,OAA0D;AACxE,QAAO;EACL,SAAS,MAAM;EACf,QAAQ,UAAU,MAAM;EACzB;;AAGH,SAAgB,cACd,QACA,SACW;CACX,MAAM,gBAAgB,SAAS;CAC/B,MAAM,cAA0C,EAAE;CAClD,MAAM,UAAkC,EAAE;CAC1C,MAAM,kCAAkB,IAAI,KAAuB;AAEnD,MAAK,MAAM,OAAO,QAAQ;EACxB,MAAM,QAAQ,kBAAkB,IAAI,SAAS,cAAc;EAC3D,MAAM,UAAU,MAAM,MAAM,IAAI;EAEhC,MAAM,QAAqB,CAAC,OAAO,IAAI,CAAC;AACxC,MAAI,IAAI,MACN,MAAK,MAAM,eAAe,IAAI,MAC5B,OAAM,KAAK,OAAO,YAAY,CAAC;EAInC,MAAM,eAAe,MAAM,SAAS,IAAI,MAAM,MAAM,EAAE,GAAG,KAAA;AAEzD,cAAY,WAAW;GACrB,IAAI;GACJ,MAAM,IAAI;GACV,UAAU,IAAI,QAAQ,EAAE;GACxB;GACA,SAAS;GACV;AAED,MAAI,aACF,MAAK,MAAM,SAAS,aAClB,SAAQ,SAAS;EAIrB,MAAM,YAAY,IAAI,WAClB,MAAM,QAAQ,IAAI,SAAS,GACzB,IAAI,WACJ,CAAC,IAAI,SAAS,GAChB,EAAE;AACN,OAAK,MAAM,YAAY,UACrB,SAAQ,YAAY;AAGtB,MAAI,IAAI,UAAU,KAAA,GAAW;GAC3B,MAAM,eAAe,YAAY,IAAI,UAAU,SAAS,OAAO,IAAI,MAAM;GACzE,IAAI,SAAS,gBAAgB,IAAI,aAAa;AAC9C,OAAI,CAAC,QAAQ;AACX,aAAS,EAAE;AACX,oBAAgB,IAAI,cAAc,OAAO;;AAE3C,UAAO,KAAK,QAAQ;;;AASxB,QAAO;EAAE,QAAQ;EAAa;EAAS,YALpB,MAAM,KAAK,kBAAkB,CAAC,IAAI,eAAe;GAClE;GACA,QAAQ;GACT,EAEgD;EAAE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
Object.defineProperties(exports, {
|
|
3
|
+
__esModule: { value: true },
|
|
4
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
5
|
+
});
|
|
6
|
+
const require_tokenize = require("../tokenize-CyKMb3O9.cjs");
|
|
7
|
+
const require_render = require("../render-C7VPZ7if.cjs");
|
|
8
|
+
let react = require("react");
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
//#region src/compat/index.tsx
|
|
11
|
+
function toArray(text, options) {
|
|
12
|
+
const fullOptions = {
|
|
13
|
+
data: options.data,
|
|
14
|
+
customEmojis: options.customEmojis,
|
|
15
|
+
ascii: options.ascii ?? true,
|
|
16
|
+
defaultSkin: options.defaultSkin,
|
|
17
|
+
extraAliases: options.extraAliases
|
|
18
|
+
};
|
|
19
|
+
const renderSet = options.set ?? "native";
|
|
20
|
+
const resolvedGetImageUrl = require_render.resolveImageUrlFn({
|
|
21
|
+
getImageUrl: options.getImageUrl,
|
|
22
|
+
imageUrlTemplate: options.imageUrlTemplate,
|
|
23
|
+
sprite: options.sprite
|
|
24
|
+
});
|
|
25
|
+
const createKey = require_render.createTokenKeyFactory();
|
|
26
|
+
return require_tokenize.tokenize(text, fullOptions).map((token) => {
|
|
27
|
+
if (token.type === "text") return token.value;
|
|
28
|
+
if (token.type === "unknown") return token.match;
|
|
29
|
+
const key = createKey(token);
|
|
30
|
+
const rendered = require_render.renderTokenDefault(token, {
|
|
31
|
+
getImageUrl: resolvedGetImageUrl,
|
|
32
|
+
set: renderSet,
|
|
33
|
+
sprite: options.sprite
|
|
34
|
+
});
|
|
35
|
+
if ((0, react.isValidElement)(rendered)) return (0, react.cloneElement)(rendered, { key });
|
|
36
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
37
|
+
title: token.shortcode,
|
|
38
|
+
children: rendered
|
|
39
|
+
}, key);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function Emoji({ text, className, onlyEmojiClassName, options, ref, svg, ...htmlProps }) {
|
|
43
|
+
const data = options.data;
|
|
44
|
+
const customEmojis = options.customEmojis;
|
|
45
|
+
const ascii = options.ascii;
|
|
46
|
+
const defaultSkin = options.defaultSkin;
|
|
47
|
+
const extraAliases = options.extraAliases;
|
|
48
|
+
const getImageUrl = options.getImageUrl;
|
|
49
|
+
const imageUrlTemplate = options.imageUrlTemplate;
|
|
50
|
+
const sprite = options.sprite;
|
|
51
|
+
const set = options.set ?? (svg ? "apple" : "native");
|
|
52
|
+
const { elements, allEmoji } = (0, react.useMemo)(() => {
|
|
53
|
+
const elements = toArray(text, {
|
|
54
|
+
data,
|
|
55
|
+
customEmojis,
|
|
56
|
+
ascii,
|
|
57
|
+
defaultSkin,
|
|
58
|
+
extraAliases,
|
|
59
|
+
getImageUrl,
|
|
60
|
+
imageUrlTemplate,
|
|
61
|
+
set,
|
|
62
|
+
sprite
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
allEmoji: elements.every((element) => typeof element !== "string" || element.trim() === ""),
|
|
66
|
+
elements
|
|
67
|
+
};
|
|
68
|
+
}, [
|
|
69
|
+
text,
|
|
70
|
+
data,
|
|
71
|
+
customEmojis,
|
|
72
|
+
ascii,
|
|
73
|
+
defaultSkin,
|
|
74
|
+
extraAliases,
|
|
75
|
+
getImageUrl,
|
|
76
|
+
imageUrlTemplate,
|
|
77
|
+
set,
|
|
78
|
+
sprite
|
|
79
|
+
]);
|
|
80
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
81
|
+
className: (0, react.useMemo)(() => [className, allEmoji && onlyEmojiClassName].filter(Boolean).join(" ") || void 0, [
|
|
82
|
+
className,
|
|
83
|
+
allEmoji,
|
|
84
|
+
onlyEmojiClassName
|
|
85
|
+
]),
|
|
86
|
+
ref,
|
|
87
|
+
...htmlProps,
|
|
88
|
+
children: elements
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
exports.default = Emoji;
|
|
93
|
+
exports.toArray = toArray;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { d as GetImageUrl, g as TokenizeOptions, i as EmojiData, p as SpriteConfig, s as EmojiSet } from "../types-Dyzdpq-R.cjs";
|
|
2
|
+
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
import { HTMLAttributes, ReactElement, Ref } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/compat/index.d.ts
|
|
6
|
+
interface CompatOptions extends Partial<Omit<TokenizeOptions, 'data'>> {
|
|
7
|
+
data: EmojiData;
|
|
8
|
+
getImageUrl?: GetImageUrl;
|
|
9
|
+
imageUrlTemplate?: string;
|
|
10
|
+
set?: EmojiSet;
|
|
11
|
+
sprite?: SpriteConfig;
|
|
12
|
+
}
|
|
13
|
+
interface EmojiProps extends HTMLAttributes<HTMLSpanElement> {
|
|
14
|
+
text: string;
|
|
15
|
+
onlyEmojiClassName?: string;
|
|
16
|
+
ref?: Ref<HTMLSpanElement>;
|
|
17
|
+
svg?: boolean;
|
|
18
|
+
options: CompatOptions;
|
|
19
|
+
}
|
|
20
|
+
declare function toArray(text: string, options: CompatOptions): Array<string | ReactElement>;
|
|
21
|
+
declare function Emoji({
|
|
22
|
+
text,
|
|
23
|
+
className,
|
|
24
|
+
onlyEmojiClassName,
|
|
25
|
+
options,
|
|
26
|
+
ref,
|
|
27
|
+
svg,
|
|
28
|
+
...htmlProps
|
|
29
|
+
}: EmojiProps): _$react_jsx_runtime0.JSX.Element;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { CompatOptions, EmojiProps, Emoji as default, toArray };
|
|
32
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/compat/index.tsx"],"mappings":";;;;;UAgBiB,aAAA,SAAsB,OAAA,CAAQ,IAAA,CAAK,eAAA;EAClD,IAAA,EAAM,SAAA;EACN,WAAA,GAAc,WAAA;EACd,gBAAA;EACA,GAAA,GAAM,QAAA;EACN,MAAA,GAAS,YAAA;AAAA;AAAA,UAGM,UAAA,SAAmB,cAAA,CAAe,eAAA;EACjD,IAAA;EACA,kBAAA;EACA,GAAA,GAAM,GAAA,CAAI,eAAA;EACV,GAAA;EACA,OAAA,EAAS,aAAA;AAAA;AAAA,iBAGK,OAAA,CAAQ,IAAA,UAAc,OAAA,EAAS,aAAA,GAAgB,KAAA,UAAe,YAAA;AAAA,iBAyCtD,KAAA,CAAA;EACtB,IAAA;EACA,SAAA;EACA,kBAAA;EACA,OAAA;EACA,GAAA;EACA,GAAA;EAAA,GACG;AAAA,GACF,UAAA,GAAU,oBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { d as GetImageUrl, g as TokenizeOptions, i as EmojiData, p as SpriteConfig, s as EmojiSet } from "../types-o0mRO30y.mjs";
|
|
2
|
+
import { HTMLAttributes, ReactElement, Ref } from "react";
|
|
3
|
+
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/compat/index.d.ts
|
|
6
|
+
interface CompatOptions extends Partial<Omit<TokenizeOptions, 'data'>> {
|
|
7
|
+
data: EmojiData;
|
|
8
|
+
getImageUrl?: GetImageUrl;
|
|
9
|
+
imageUrlTemplate?: string;
|
|
10
|
+
set?: EmojiSet;
|
|
11
|
+
sprite?: SpriteConfig;
|
|
12
|
+
}
|
|
13
|
+
interface EmojiProps extends HTMLAttributes<HTMLSpanElement> {
|
|
14
|
+
text: string;
|
|
15
|
+
onlyEmojiClassName?: string;
|
|
16
|
+
ref?: Ref<HTMLSpanElement>;
|
|
17
|
+
svg?: boolean;
|
|
18
|
+
options: CompatOptions;
|
|
19
|
+
}
|
|
20
|
+
declare function toArray(text: string, options: CompatOptions): Array<string | ReactElement>;
|
|
21
|
+
declare function Emoji({
|
|
22
|
+
text,
|
|
23
|
+
className,
|
|
24
|
+
onlyEmojiClassName,
|
|
25
|
+
options,
|
|
26
|
+
ref,
|
|
27
|
+
svg,
|
|
28
|
+
...htmlProps
|
|
29
|
+
}: EmojiProps): _$react_jsx_runtime0.JSX.Element;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { CompatOptions, EmojiProps, Emoji as default, toArray };
|
|
32
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/compat/index.tsx"],"mappings":";;;;;UAgBiB,aAAA,SAAsB,OAAA,CAAQ,IAAA,CAAK,eAAA;EAClD,IAAA,EAAM,SAAA;EACN,WAAA,GAAc,WAAA;EACd,gBAAA;EACA,GAAA,GAAM,QAAA;EACN,MAAA,GAAS,YAAA;AAAA;AAAA,UAGM,UAAA,SAAmB,cAAA,CAAe,eAAA;EACjD,IAAA;EACA,kBAAA;EACA,GAAA,GAAM,GAAA,CAAI,eAAA;EACV,GAAA;EACA,OAAA,EAAS,aAAA;AAAA;AAAA,iBAGK,OAAA,CAAQ,IAAA,UAAc,OAAA,EAAS,aAAA,GAAgB,KAAA,UAAe,YAAA;AAAA,iBAyCtD,KAAA,CAAA;EACtB,IAAA;EACA,SAAA;EACA,kBAAA;EACA,OAAA;EACA,GAAA;EACA,GAAA;EAAA,GACG;AAAA,GACF,UAAA,GAAU,oBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as tokenize } from "../tokenize-BUKMZ9Yg.mjs";
|
|
3
|
+
import { i as resolveImageUrlFn, n as renderTokenDefault, r as createTokenKeyFactory } from "../render-DzloPAWX.mjs";
|
|
4
|
+
import { cloneElement, isValidElement, useMemo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/compat/index.tsx
|
|
7
|
+
function toArray(text, options) {
|
|
8
|
+
const fullOptions = {
|
|
9
|
+
data: options.data,
|
|
10
|
+
customEmojis: options.customEmojis,
|
|
11
|
+
ascii: options.ascii ?? true,
|
|
12
|
+
defaultSkin: options.defaultSkin,
|
|
13
|
+
extraAliases: options.extraAliases
|
|
14
|
+
};
|
|
15
|
+
const renderSet = options.set ?? "native";
|
|
16
|
+
const resolvedGetImageUrl = resolveImageUrlFn({
|
|
17
|
+
getImageUrl: options.getImageUrl,
|
|
18
|
+
imageUrlTemplate: options.imageUrlTemplate,
|
|
19
|
+
sprite: options.sprite
|
|
20
|
+
});
|
|
21
|
+
const createKey = createTokenKeyFactory();
|
|
22
|
+
return tokenize(text, fullOptions).map((token) => {
|
|
23
|
+
if (token.type === "text") return token.value;
|
|
24
|
+
if (token.type === "unknown") return token.match;
|
|
25
|
+
const key = createKey(token);
|
|
26
|
+
const rendered = renderTokenDefault(token, {
|
|
27
|
+
getImageUrl: resolvedGetImageUrl,
|
|
28
|
+
set: renderSet,
|
|
29
|
+
sprite: options.sprite
|
|
30
|
+
});
|
|
31
|
+
if (isValidElement(rendered)) return cloneElement(rendered, { key });
|
|
32
|
+
return /* @__PURE__ */ jsx("span", {
|
|
33
|
+
title: token.shortcode,
|
|
34
|
+
children: rendered
|
|
35
|
+
}, key);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function Emoji({ text, className, onlyEmojiClassName, options, ref, svg, ...htmlProps }) {
|
|
39
|
+
const data = options.data;
|
|
40
|
+
const customEmojis = options.customEmojis;
|
|
41
|
+
const ascii = options.ascii;
|
|
42
|
+
const defaultSkin = options.defaultSkin;
|
|
43
|
+
const extraAliases = options.extraAliases;
|
|
44
|
+
const getImageUrl = options.getImageUrl;
|
|
45
|
+
const imageUrlTemplate = options.imageUrlTemplate;
|
|
46
|
+
const sprite = options.sprite;
|
|
47
|
+
const set = options.set ?? (svg ? "apple" : "native");
|
|
48
|
+
const { elements, allEmoji } = useMemo(() => {
|
|
49
|
+
const elements = toArray(text, {
|
|
50
|
+
data,
|
|
51
|
+
customEmojis,
|
|
52
|
+
ascii,
|
|
53
|
+
defaultSkin,
|
|
54
|
+
extraAliases,
|
|
55
|
+
getImageUrl,
|
|
56
|
+
imageUrlTemplate,
|
|
57
|
+
set,
|
|
58
|
+
sprite
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
allEmoji: elements.every((element) => typeof element !== "string" || element.trim() === ""),
|
|
62
|
+
elements
|
|
63
|
+
};
|
|
64
|
+
}, [
|
|
65
|
+
text,
|
|
66
|
+
data,
|
|
67
|
+
customEmojis,
|
|
68
|
+
ascii,
|
|
69
|
+
defaultSkin,
|
|
70
|
+
extraAliases,
|
|
71
|
+
getImageUrl,
|
|
72
|
+
imageUrlTemplate,
|
|
73
|
+
set,
|
|
74
|
+
sprite
|
|
75
|
+
]);
|
|
76
|
+
return /* @__PURE__ */ jsx("span", {
|
|
77
|
+
className: useMemo(() => [className, allEmoji && onlyEmojiClassName].filter(Boolean).join(" ") || void 0, [
|
|
78
|
+
className,
|
|
79
|
+
allEmoji,
|
|
80
|
+
onlyEmojiClassName
|
|
81
|
+
]),
|
|
82
|
+
ref,
|
|
83
|
+
...htmlProps,
|
|
84
|
+
children: elements
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
export { Emoji as default, toArray };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/compat/index.tsx"],"sourcesContent":["'use client';\n\nimport type { HTMLAttributes, ReactElement, Ref } from 'react';\nimport { cloneElement, isValidElement, useMemo } from 'react';\nimport { tokenize } from '../core/tokenize';\nimport type {\n EmojiData,\n EmojiSet,\n GetImageUrl,\n SpriteConfig,\n TokenizeOptions,\n} from '../core/types';\nimport { resolveImageUrlFn } from '../react/image-url';\nimport { createTokenKeyFactory } from '../react/keys';\nimport { renderTokenDefault } from '../react/render';\n\nexport interface CompatOptions extends Partial<Omit<TokenizeOptions, 'data'>> {\n data: EmojiData;\n getImageUrl?: GetImageUrl;\n imageUrlTemplate?: string;\n set?: EmojiSet;\n sprite?: SpriteConfig;\n}\n\nexport interface EmojiProps extends HTMLAttributes<HTMLSpanElement> {\n text: string;\n onlyEmojiClassName?: string;\n ref?: Ref<HTMLSpanElement>;\n svg?: boolean;\n options: CompatOptions;\n}\n\nexport function toArray(text: string, options: CompatOptions): Array<string | ReactElement> {\n const data = options.data;\n\n const fullOptions: TokenizeOptions = {\n data,\n customEmojis: options.customEmojis,\n ascii: options.ascii ?? true,\n defaultSkin: options.defaultSkin,\n extraAliases: options.extraAliases,\n };\n const renderSet = options.set ?? 'native';\n const resolvedGetImageUrl = resolveImageUrlFn({\n getImageUrl: options.getImageUrl,\n imageUrlTemplate: options.imageUrlTemplate,\n sprite: options.sprite,\n });\n const createKey = createTokenKeyFactory();\n\n return tokenize(text, fullOptions).map((token) => {\n if (token.type === 'text') return token.value;\n if (token.type === 'unknown') return token.match;\n\n const key = createKey(token);\n const rendered = renderTokenDefault(token, {\n getImageUrl: resolvedGetImageUrl,\n set: renderSet,\n sprite: options.sprite,\n });\n\n if (isValidElement(rendered)) {\n return cloneElement(rendered, { key });\n }\n\n return (\n <span key={key} title={token.shortcode}>\n {rendered}\n </span>\n );\n });\n}\n\nexport default function Emoji({\n text,\n className,\n onlyEmojiClassName,\n options,\n ref,\n svg,\n ...htmlProps\n}: EmojiProps) {\n const data = options.data;\n const customEmojis = options.customEmojis;\n const ascii = options.ascii;\n const defaultSkin = options.defaultSkin;\n const extraAliases = options.extraAliases;\n const getImageUrl = options.getImageUrl;\n const imageUrlTemplate = options.imageUrlTemplate;\n const sprite = options.sprite;\n const set = options.set ?? (svg ? 'apple' : 'native');\n\n const { elements, allEmoji } = useMemo(() => {\n const elements = toArray(text, {\n data,\n customEmojis,\n ascii,\n defaultSkin,\n extraAliases,\n getImageUrl,\n imageUrlTemplate,\n set,\n sprite,\n });\n\n return {\n allEmoji: elements.every((element) => typeof element !== 'string' || element.trim() === ''),\n elements,\n };\n }, [\n text,\n data,\n customEmojis,\n ascii,\n defaultSkin,\n extraAliases,\n getImageUrl,\n imageUrlTemplate,\n set,\n sprite,\n ]);\n\n const combinedClassName = useMemo(\n () => [className, allEmoji && onlyEmojiClassName].filter(Boolean).join(' ') || undefined,\n [className, allEmoji, onlyEmojiClassName],\n );\n\n return (\n <span className={combinedClassName} ref={ref} {...htmlProps}>\n {elements}\n </span>\n );\n}\n"],"mappings":";;;;;;AAgCA,SAAgB,QAAQ,MAAc,SAAsD;CAG1F,MAAM,cAA+B;EACnC,MAHW,QAAQ;EAInB,cAAc,QAAQ;EACtB,OAAO,QAAQ,SAAS;EACxB,aAAa,QAAQ;EACrB,cAAc,QAAQ;EACvB;CACD,MAAM,YAAY,QAAQ,OAAO;CACjC,MAAM,sBAAsB,kBAAkB;EAC5C,aAAa,QAAQ;EACrB,kBAAkB,QAAQ;EAC1B,QAAQ,QAAQ;EACjB,CAAC;CACF,MAAM,YAAY,uBAAuB;AAEzC,QAAO,SAAS,MAAM,YAAY,CAAC,KAAK,UAAU;AAChD,MAAI,MAAM,SAAS,OAAQ,QAAO,MAAM;AACxC,MAAI,MAAM,SAAS,UAAW,QAAO,MAAM;EAE3C,MAAM,MAAM,UAAU,MAAM;EAC5B,MAAM,WAAW,mBAAmB,OAAO;GACzC,aAAa;GACb,KAAK;GACL,QAAQ,QAAQ;GACjB,CAAC;AAEF,MAAI,eAAe,SAAS,CAC1B,QAAO,aAAa,UAAU,EAAE,KAAK,CAAC;AAGxC,SACE,oBAAC,QAAD;GAAgB,OAAO,MAAM;aAC1B;GACI,EAFI,IAEJ;GAET;;AAGJ,SAAwB,MAAM,EAC5B,MACA,WACA,oBACA,SACA,KACA,KACA,GAAG,aACU;CACb,MAAM,OAAO,QAAQ;CACrB,MAAM,eAAe,QAAQ;CAC7B,MAAM,QAAQ,QAAQ;CACtB,MAAM,cAAc,QAAQ;CAC5B,MAAM,eAAe,QAAQ;CAC7B,MAAM,cAAc,QAAQ;CAC5B,MAAM,mBAAmB,QAAQ;CACjC,MAAM,SAAS,QAAQ;CACvB,MAAM,MAAM,QAAQ,QAAQ,MAAM,UAAU;CAE5C,MAAM,EAAE,UAAU,aAAa,cAAc;EAC3C,MAAM,WAAW,QAAQ,MAAM;GAC7B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;AAEF,SAAO;GACL,UAAU,SAAS,OAAO,YAAY,OAAO,YAAY,YAAY,QAAQ,MAAM,KAAK,GAAG;GAC3F;GACD;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAOF,QACE,oBAAC,QAAD;EAAM,WANkB,cAClB,CAAC,WAAW,YAAY,mBAAmB,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI,KAAA,GAC/E;GAAC;GAAW;GAAU;GAAmB,CAIP;EAAO;EAAK,GAAI;YAC/C;EACI,CAAA"}
|
package/dist/core.cjs
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_tokenize = require("./tokenize-CyKMb3O9.cjs");
|
|
3
|
+
exports.buildAsciiCandidates = require_tokenize.buildAsciiCandidates;
|
|
4
|
+
exports.buildAsciiIndex = require_tokenize.buildAsciiIndex;
|
|
5
|
+
exports.buildIndexes = require_tokenize.buildIndexes;
|
|
6
|
+
exports.detectSkinToneFromUnified = require_tokenize.detectSkinToneFromUnified;
|
|
7
|
+
exports.matchAscii = require_tokenize.matchAscii;
|
|
8
|
+
exports.resolveSkin = require_tokenize.resolveSkin;
|
|
9
|
+
exports.skinToneShortcodeToTone = require_tokenize.skinToneShortcodeToTone;
|
|
10
|
+
exports.tokenize = require_tokenize.tokenize;
|
package/dist/core.d.cts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { _ as UnknownToken, a as EmojiEntry, c as EmojiSkin, d as GetImageUrl, f as SkinTone, g as TokenizeOptions, h as Token, i as EmojiData, l as EmojiSource, m as TextToken, n as CustomEmojiCategory, o as EmojiImageContext, p as SpriteConfig, r as EmojiConfig, s as EmojiSet, t as CustomEmoji, u as EmojiToken } from "./types-Dyzdpq-R.cjs";
|
|
2
|
+
import { a as buildAsciiCandidates, i as skinToneShortcodeToTone, n as detectSkinToneFromUnified, o as buildAsciiIndex, r as resolveSkin, s as matchAscii, t as tokenize } from "./index-DPd10zCJ.cjs";
|
|
3
|
+
import { n as ShortcodeEntry, r as buildIndexes, t as EmojiIndexes } from "./indexes-3fK5ySH8.cjs";
|
|
4
|
+
export { CustomEmoji, CustomEmojiCategory, EmojiConfig, EmojiData, EmojiEntry, EmojiImageContext, EmojiIndexes, EmojiSet, EmojiSkin, EmojiSource, EmojiToken, GetImageUrl, ShortcodeEntry, SkinTone, SpriteConfig, TextToken, Token, TokenizeOptions, UnknownToken, buildAsciiCandidates, buildAsciiIndex, buildIndexes, detectSkinToneFromUnified, matchAscii, resolveSkin, skinToneShortcodeToTone, tokenize };
|
package/dist/core.d.mts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { _ as UnknownToken, a as EmojiEntry, c as EmojiSkin, d as GetImageUrl, f as SkinTone, g as TokenizeOptions, h as Token, i as EmojiData, l as EmojiSource, m as TextToken, n as CustomEmojiCategory, o as EmojiImageContext, p as SpriteConfig, r as EmojiConfig, s as EmojiSet, t as CustomEmoji, u as EmojiToken } from "./types-o0mRO30y.mjs";
|
|
2
|
+
import { a as buildAsciiCandidates, i as skinToneShortcodeToTone, n as detectSkinToneFromUnified, o as buildAsciiIndex, r as resolveSkin, s as matchAscii, t as tokenize } from "./index-B39vk6JI.mjs";
|
|
3
|
+
import { n as ShortcodeEntry, r as buildIndexes, t as EmojiIndexes } from "./indexes-BMCSN-X0.mjs";
|
|
4
|
+
export { CustomEmoji, CustomEmojiCategory, EmojiConfig, EmojiData, EmojiEntry, EmojiImageContext, EmojiIndexes, EmojiSet, EmojiSkin, EmojiSource, EmojiToken, GetImageUrl, ShortcodeEntry, SkinTone, SpriteConfig, TextToken, Token, TokenizeOptions, UnknownToken, buildAsciiCandidates, buildAsciiIndex, buildIndexes, detectSkinToneFromUnified, matchAscii, resolveSkin, skinToneShortcodeToTone, tokenize };
|
package/dist/core.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as skinToneShortcodeToTone, c as buildAsciiIndex, i as resolveSkin, l as matchAscii, o as buildIndexes, r as detectSkinToneFromUnified, s as buildAsciiCandidates, t as tokenize } from "./tokenize-BUKMZ9Yg.mjs";
|
|
2
|
+
export { buildAsciiCandidates, buildAsciiIndex, buildIndexes, detectSkinToneFromUnified, matchAscii, resolveSkin, skinToneShortcodeToTone, tokenize };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { a as EmojiEntry, f as SkinTone, g as TokenizeOptions, h as Token, i as EmojiData } from "./types-o0mRO30y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/ascii.d.ts
|
|
4
|
+
declare function buildAsciiIndex(data: EmojiData): Map<string, string>;
|
|
5
|
+
declare function buildAsciiCandidates(asciiIndex: Map<string, string>): string[];
|
|
6
|
+
declare function matchAscii(input: string, position: number, asciiIndex: Map<string, string>, asciiCandidates?: string[]): {
|
|
7
|
+
ascii: string;
|
|
8
|
+
emojiId: string;
|
|
9
|
+
} | undefined;
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/core/skin.d.ts
|
|
12
|
+
declare function detectSkinToneFromUnified(unified: string): SkinTone | undefined;
|
|
13
|
+
declare function resolveSkin(emoji: EmojiEntry, explicitSkin: SkinTone | undefined, defaultSkin: SkinTone | undefined): {
|
|
14
|
+
native: string;
|
|
15
|
+
skin: SkinTone | undefined;
|
|
16
|
+
};
|
|
17
|
+
declare function skinToneShortcodeToTone(shortcode: string): SkinTone | undefined;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/core/tokenize.d.ts
|
|
20
|
+
declare function tokenize(input: string, options: TokenizeOptions): Token[];
|
|
21
|
+
//#endregion
|
|
22
|
+
export { buildAsciiCandidates as a, skinToneShortcodeToTone as i, detectSkinToneFromUnified as n, buildAsciiIndex as o, resolveSkin as r, matchAscii as s, tokenize as t };
|
|
23
|
+
//# sourceMappingURL=index-B39vk6JI.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-B39vk6JI.d.mts","names":[],"sources":["../src/core/ascii.ts","../src/core/skin.ts","../src/core/tokenize.ts"],"mappings":";;;iBA8BgB,eAAA,CAAgB,IAAA,EAAM,SAAA,GAAY,GAAA;AAAA,iBAkBlC,oBAAA,CAAqB,UAAA,EAAY,GAAA;AAAA,iBAOjC,UAAA,CACd,KAAA,UACA,QAAA,UACA,UAAA,EAAY,GAAA,kBACZ,eAAA;EACG,KAAA;EAAe,OAAA;AAAA;;;iBCzCJ,yBAAA,CAA0B,OAAA,WAAkB,QAAA;AAAA,iBAU5C,WAAA,CACd,KAAA,EAAO,UAAA,EACP,YAAA,EAAc,QAAA,cACd,WAAA,EAAa,QAAA;EACV,MAAA;EAAgB,IAAA,EAAM,QAAA;AAAA;AAAA,iBAmBX,uBAAA,CAAwB,SAAA,WAAoB,QAAA;;;iBC2D5C,QAAA,CAAS,KAAA,UAAe,OAAA,EAAS,eAAA,GAAkB,KAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { a as EmojiEntry, f as SkinTone, g as TokenizeOptions, h as Token, i as EmojiData } from "./types-Dyzdpq-R.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/ascii.d.ts
|
|
4
|
+
declare function buildAsciiIndex(data: EmojiData): Map<string, string>;
|
|
5
|
+
declare function buildAsciiCandidates(asciiIndex: Map<string, string>): string[];
|
|
6
|
+
declare function matchAscii(input: string, position: number, asciiIndex: Map<string, string>, asciiCandidates?: string[]): {
|
|
7
|
+
ascii: string;
|
|
8
|
+
emojiId: string;
|
|
9
|
+
} | undefined;
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/core/skin.d.ts
|
|
12
|
+
declare function detectSkinToneFromUnified(unified: string): SkinTone | undefined;
|
|
13
|
+
declare function resolveSkin(emoji: EmojiEntry, explicitSkin: SkinTone | undefined, defaultSkin: SkinTone | undefined): {
|
|
14
|
+
native: string;
|
|
15
|
+
skin: SkinTone | undefined;
|
|
16
|
+
};
|
|
17
|
+
declare function skinToneShortcodeToTone(shortcode: string): SkinTone | undefined;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/core/tokenize.d.ts
|
|
20
|
+
declare function tokenize(input: string, options: TokenizeOptions): Token[];
|
|
21
|
+
//#endregion
|
|
22
|
+
export { buildAsciiCandidates as a, skinToneShortcodeToTone as i, detectSkinToneFromUnified as n, buildAsciiIndex as o, resolveSkin as r, matchAscii as s, tokenize as t };
|
|
23
|
+
//# sourceMappingURL=index-DPd10zCJ.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DPd10zCJ.d.cts","names":[],"sources":["../src/core/ascii.ts","../src/core/skin.ts","../src/core/tokenize.ts"],"mappings":";;;iBA8BgB,eAAA,CAAgB,IAAA,EAAM,SAAA,GAAY,GAAA;AAAA,iBAkBlC,oBAAA,CAAqB,UAAA,EAAY,GAAA;AAAA,iBAOjC,UAAA,CACd,KAAA,UACA,QAAA,UACA,UAAA,EAAY,GAAA,kBACZ,eAAA;EACG,KAAA;EAAe,OAAA;AAAA;;;iBCzCJ,yBAAA,CAA0B,OAAA,WAAkB,QAAA;AAAA,iBAU5C,WAAA,CACd,KAAA,EAAO,UAAA,EACP,YAAA,EAAc,QAAA,cACd,WAAA,EAAa,QAAA;EACV,MAAA;EAAgB,IAAA,EAAM,QAAA;AAAA;AAAA,iBAmBX,uBAAA,CAAwB,SAAA,WAAoB,QAAA;;;iBC2D5C,QAAA,CAAS,KAAA,UAAe,OAAA,EAAS,eAAA,GAAkB,KAAA"}
|