@etrepum/lexical-emoji-plan 0.0.13-nightly.20240605.0 → 0.0.13

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.
@@ -12,7 +12,8 @@ export type SerializedEmojiNode = Spread<{
12
12
  * transforms.
13
13
  *
14
14
  * The display behavior is all implemented in the mutation listener set up
15
- * by EmojiPlan.
15
+ * by EmojiPlan, which makes it a little easier to ensure that clean-up is
16
+ * done properly.
16
17
  */
17
18
  export declare class EmojiNode extends TextNode {
18
19
  static getType(): "emoji";
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiNode.d.ts","sourceRoot":"","sources":["../src/EmojiNode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACtC;IACE,IAAI,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5C,EACD,kBAAkB,CACnB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,QAAQ;IACrC,MAAM,CAAC,OAAO,IAAI,OAAO;IAIzB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS;IAIxC,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAIjE,UAAU,IAAI,mBAAmB;CAMlC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAMxD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,SAAS,CAEnB"}
1
+ {"version":3,"file":"EmojiNode.d.ts","sourceRoot":"","sources":["../src/EmojiNode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACtC;IACE,IAAI,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5C,EACD,kBAAkB,CACnB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,SAAU,SAAQ,QAAQ;IACrC,MAAM,CAAC,OAAO,IAAI,OAAO;IAIzB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS;IAIxC,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAIjE,UAAU,IAAI,mBAAmB;CAMlC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAMxD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,SAAS,CAEnB"}
@@ -8,8 +8,20 @@
8
8
  export declare const PACKAGE_VERSION: string;
9
9
  declare const NAME = "@etrepum/lexical-builder/emoji-plan";
10
10
  export interface EmojiPlanConfig {
11
+ /**
12
+ * The base URL to find the emoji PNG files, originally from the 64x64 set in emoji-datasource-facebook.
13
+ * Default: https://cdn.jsdelivr.net/npm/@etrepum/lexical-emoji-plan@${import.meta.env.PACKAGE_VERSION}/dist/emoji
14
+ *
15
+ * Do not add a trailing slash to the path.
16
+ */
11
17
  emojiBaseUrl: string;
18
+ /**
19
+ * The class to use for emoji nodes
20
+ */
12
21
  emojiClass: string;
22
+ /**
23
+ * The class to use for emoji nodes after the image is loaded and set as a background-image
24
+ */
13
25
  emojiLoadedClass: string;
14
26
  }
15
27
  declare module "@etrepum/lexical-builder" {
@@ -17,6 +29,20 @@ declare module "@etrepum/lexical-builder" {
17
29
  [NAME]: typeof EmojiPlan;
18
30
  }
19
31
  }
32
+ /**
33
+ * A plan to use the emoji-datasource-facebook emoji database to convert
34
+ * short names such as :man-facepalming: or :) to their corresponding
35
+ * emoji, and uses an img from the same package rather than the current
36
+ * font to display it so that the display is consistent regardless of the
37
+ * platform.
38
+ *
39
+ * Loading the emoji database is done using an async import so will typicallly
40
+ * be a lazy loaded module in a separate chunk.
41
+ *
42
+ * Images are also maximally lazily loaded, before they load the font's
43
+ * representation of that emoji is used and then the emojiLoadedClass is
44
+ * added.
45
+ */
20
46
  export declare const EmojiPlan: import('@etrepum/lexical-builder').LexicalPlan<EmojiPlanConfig, "@etrepum/lexical-builder/emoji-plan">;
21
47
  export {};
22
48
  //# sourceMappingURL=EmojiPlan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPlan.d.ts","sourceRoot":"","sources":["../src/EmojiPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,eAAe,EAAE,MAAwC,CAAC;AAEvE,QAAA,MAAM,IAAI,wCAAwC,CAAC;AACnD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,OAAO,QAAQ,0BAA0B,CAAC;IACxC,UAAU,mBAAmB;QAC3B,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS,CAAC;KAC1B;CACF;AAED,eAAO,MAAM,SAAS,wGA8CpB,CAAC"}
1
+ {"version":3,"file":"EmojiPlan.d.ts","sourceRoot":"","sources":["../src/EmojiPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,eAAe,EAAE,MAAwC,CAAC;AAEvE,QAAA,MAAM,IAAI,wCAAwC,CAAC;AACnD,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,OAAO,QAAQ,0BAA0B,CAAC;IACxC,UAAU,mBAAmB;QAC3B,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS,CAAC;KAC1B;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,wGAmEpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { f as r, $ as n } from "./index-DE5LwTx8.js";
2
+ function l(e) {
3
+ if (!e.isSimpleText() || e.hasFormat("code"))
4
+ return;
5
+ const i = e.getTextContent(), t = r(i);
6
+ if (t === null)
7
+ return;
8
+ let o;
9
+ t.position === 0 ? [o] = e.splitText(
10
+ t.position + t.shortcode.length
11
+ ) : [, o] = e.splitText(
12
+ t.position,
13
+ t.position + t.shortcode.length
14
+ );
15
+ const s = n(t.emoji);
16
+ o.replace(s);
17
+ }
18
+ export {
19
+ l as $textNodeTransform
20
+ };
@@ -5,13 +5,47 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
+ /**
9
+ * The location of the emoji match in the given text
10
+ */
8
11
  export type EmojiMatch = Readonly<{
12
+ /** The start position of the text */
9
13
  position: number;
14
+ /** The matching shortcode from the text, such as ":man-facepalming:" or ":)" */
10
15
  shortcode: string;
16
+ /** The text of the emoji from the database, such as "🤦‍♂️" or "🙂" */
11
17
  emoji: string;
12
18
  }>;
13
19
  /**
14
- * Finds emoji shortcodes in text and if found - returns its position in text, matched shortcode and unified ID
20
+ * Finds emoji shortcodes in text, tokenized by spaces. The canonical short
21
+ * names such as ":smiley:" are matched even if they are at the end of the
22
+ * text, but a text such as ":)" is only matched if it is followed by a
23
+ * space.
24
+ *
25
+ * @example Matching canonical short names
26
+ * ```js
27
+ * const result =
28
+ * assert(findEmoji(":man-facepalming").emoji === "🤦‍♂️");
29
+ * ```
30
+ *
31
+ * @example Matching non-canonical text for an emoji
32
+ * ```js
33
+ * const input = "handles :) mid-string";
34
+ * const result = findEmoji(input);
35
+ * assert(result.position === "handles ".length);
36
+ * assert(result.shortcode === ":)")
37
+ * assert(result.emoji === "🙂");
38
+ * assert([
39
+ * input.slice(0, result.position),
40
+ * result.emoji,
41
+ * input.slice(result.position + result.shortcode.length)
42
+ * ].join("") === "handles 🙂 mid-string");
43
+ * ```
44
+ *
45
+ * @example Non-canonical text does not match at the end
46
+ * ```js
47
+ * assert(findEmoji(":)") === null)
48
+ * ```
15
49
  */
16
- export default function findEmoji(text: string): EmojiMatch | null;
50
+ export declare function findEmoji(text: string): EmojiMatch | null;
17
51
  //# sourceMappingURL=findEmoji.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findEmoji.d.ts","sourceRoot":"","sources":["../src/findEmoji.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAiBH;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAqBjE"}
1
+ {"version":3,"file":"findEmoji.d.ts","sourceRoot":"","sources":["../src/findEmoji.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAiBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAqBzD"}
@@ -1,5 +1,85 @@
1
- import { $ as i } from "./index-BH2QLn55.js";
2
- const _ = `🀄 mahjong
1
+ import { definePlan as h, safeCast as p } from "@etrepum/lexical-builder";
2
+ import { mergeRegister as m } from "@lexical/utils";
3
+ import { TextNode as f } from "lexical";
4
+ class t extends f {
5
+ static getType() {
6
+ return "emoji";
7
+ }
8
+ static clone(n) {
9
+ return new t(n.__text, n.__key);
10
+ }
11
+ static importJSON(n) {
12
+ return u(n.text);
13
+ }
14
+ exportJSON() {
15
+ return {
16
+ ...super.exportJSON(),
17
+ type: "emoji"
18
+ };
19
+ }
20
+ }
21
+ function u(a) {
22
+ return new t(a).setMode("token");
23
+ }
24
+ function z(a) {
25
+ return String.fromCodePoint(
26
+ ...a.split("-").map((n) => parseInt(n, 16))
27
+ );
28
+ }
29
+ function b(a) {
30
+ return Array.from(
31
+ a,
32
+ (n) => n.codePointAt(0).toString(16).padStart(4, "0")
33
+ ).join("-");
34
+ }
35
+ const w = "@etrepum/lexical-builder/emoji-plan", q = h({
36
+ config: p({
37
+ emojiBaseUrl: "https://cdn.jsdelivr.net/npm/@etrepum/lexical-emoji-plan@0.0.13/dist/emoji",
38
+ emojiClass: "emoji-node",
39
+ emojiLoadedClass: "emoji-node-loaded"
40
+ }),
41
+ name: w,
42
+ nodes: [t],
43
+ register(a, n, r) {
44
+ const e = /* @__PURE__ */ new Map();
45
+ let o = m(
46
+ a.registerMutationListener(t, (l) => {
47
+ for (const [_, d] of l)
48
+ if (d === "destroyed") {
49
+ const i = e.get(_);
50
+ i && (e.delete(_), i());
51
+ } else {
52
+ const i = a.getElementByKey(_);
53
+ if (i) {
54
+ const g = `${n.emojiBaseUrl}/${b(i.innerText)}.png`;
55
+ i.classList.add(n.emojiClass), i.style.backgroundImage = `url(${g})`;
56
+ const s = new Image(), c = () => {
57
+ i.classList.add(n.emojiLoadedClass), e.delete(_);
58
+ };
59
+ e.set(
60
+ _,
61
+ () => s.removeEventListener("load", c)
62
+ ), s.addEventListener("load", c, {
63
+ signal: r.signal,
64
+ once: !0
65
+ }), s.src = g;
66
+ }
67
+ }
68
+ }),
69
+ () => {
70
+ for (const l of e.values())
71
+ l();
72
+ e.clear();
73
+ }
74
+ );
75
+ return import("./_textNodeTransform-CSOyqRcv.js").then(({ $textNodeTransform: l }) => {
76
+ r.signal.aborted || (o = m(
77
+ o,
78
+ a.registerNodeTransform(f, l)
79
+ ));
80
+ }), () => o();
81
+ }
82
+ }), k = `🀄 mahjong
3
83
  🃏 black_joker
4
84
  🅰️ a
5
85
  🅱️ b
@@ -1849,47 +1929,35 @@ const _ = `🀄 mahjong
1849
1929
  〰️ wavy_dash
1850
1930
  〽️ part_alternation_mark
1851
1931
  ㊗️ congratulations
1852
- ㊙️ secret`, t = _.split(`
1853
- `).reduce((a, l) => {
1854
- const [n, e, ...o] = l.split(" ");
1855
- a.set(`:${e}:`, n);
1856
- for (const r of o)
1857
- a.set(r, n);
1932
+ ㊙️ secret`, y = k.split(`
1933
+ `).reduce((a, n) => {
1934
+ const [r, e, ...o] = n.split(" ");
1935
+ a.set(`:${e}:`, r);
1936
+ for (const l of o)
1937
+ a.set(l, r);
1858
1938
  return a;
1859
1939
  }, /* @__PURE__ */ new Map());
1860
- function s(a) {
1861
- const l = a.split(" ");
1862
- for (let n = 0, e = 0; n < l.length; n++) {
1863
- const o = l[n], r = t.get(o);
1864
- if (r && // only consider matches for the unique :shortname: unless it's not at the
1940
+ function E(a) {
1941
+ const n = a.split(" ");
1942
+ for (let r = 0, e = 0; r < n.length; r++) {
1943
+ const o = n[r], l = y.get(o);
1944
+ if (l && // only consider matches for the unique :shortname: unless it's not at the
1865
1945
  // end of the text. This avoids having smileys taking precedence over
1866
1946
  // emoji with longer names (e.g. :b vs. :bear: or :p vs. :pig:)
1867
1947
  (a.length > e + o.length || o.endsWith(":")))
1868
1948
  return {
1869
1949
  position: e,
1870
1950
  shortcode: o,
1871
- emoji: r
1951
+ emoji: l
1872
1952
  };
1873
1953
  e += o.length + 1;
1874
1954
  }
1875
1955
  return null;
1876
1956
  }
1877
- function c(a) {
1878
- if (!a.isSimpleText() || a.hasFormat("code"))
1879
- return;
1880
- const l = a.getTextContent(), n = s(l);
1881
- if (n === null)
1882
- return;
1883
- let e;
1884
- n.position === 0 ? [e] = a.splitText(
1885
- n.position + n.shortcode.length
1886
- ) : [, e] = a.splitText(
1887
- n.position,
1888
- n.position + n.shortcode.length
1889
- );
1890
- const o = i(n.emoji);
1891
- e.replace(o);
1892
- }
1893
1957
  export {
1894
- c as $textNodeTransform
1958
+ u as $,
1959
+ q as E,
1960
+ E as f,
1961
+ z as t,
1962
+ b as u
1895
1963
  };
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export { EmojiPlan, type EmojiPlanConfig } from './EmojiPlan';
2
+ export { unifiedIDFromText, textFromUnifiedID } from './unifiedID';
3
+ export { findEmoji, type EmojiMatch } from './findEmoji';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
- import { E as m } from "./index-BH2QLn55.js";
1
+ import { E as a, f as e, t as f, u as m } from "./index-DE5LwTx8.js";
2
2
  export {
3
- m as EmojiPlan
3
+ a as EmojiPlan,
4
+ e as findEmoji,
5
+ f as textFromUnifiedID,
6
+ m as unifiedIDFromText
4
7
  };
@@ -1,6 +1,9 @@
1
1
  /**
2
- * We rewrite the emoji dataset into plain text, which serializes smaller and
3
- * is quicker to parse
2
+ * We rewrite the emoji dataset into plain text delimited by
3
+ * spaces and newlines, which serializes smaller and is quicker to parse.
4
+ *
5
+ * This is done at build time by vite-plugin-data, which does compile-time
6
+ * evaluation of modules with .data in their name.
4
7
  */
5
8
  export declare const supportedEmojis: string;
6
9
  //# sourceMappingURL=supportedEmojis.data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supportedEmojis.data.d.ts","sourceRoot":"","sources":["../src/supportedEmojis.data.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,eAAe,QAYf,CAAC"}
1
+ {"version":3,"file":"supportedEmojis.data.d.ts","sourceRoot":"","sources":["../src/supportedEmojis.data.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAYf,CAAC"}
@@ -1,3 +1,22 @@
1
+ /**
2
+ * Convert a unified emoji ID its emoji representation.
3
+ *
4
+ * @example
5
+ * ```js
6
+ * assert(textFromUnifiedId("1F926-200D-2642-FE0F") === "🤦‍♂️");
7
+ * ```
8
+ *
9
+ * @param unifiedID The hyphen delimited hex representation of the UTF-16 code points in the emoji
10
+ * @returns The emoji as a string
11
+ */
1
12
  export declare function textFromUnifiedID(unifiedID: string): string;
13
+ /**
14
+ * Convert an emoji to its unified id (in uppercase).
15
+ *
16
+ * @example
17
+ * ```js
18
+ * assert(unifiedIDFromText("🤦‍♂️") === "1F926-200D-2642-FE0F");
19
+ * ```
20
+ */
2
21
  export declare function unifiedIDFromText(text: string): string;
3
22
  //# sourceMappingURL=unifiedID.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unifiedID.d.ts","sourceRoot":"","sources":["../src/unifiedID.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD"}
1
+ {"version":3,"file":"unifiedID.d.ts","sourceRoot":"","sources":["../src/unifiedID.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD"}
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "test": "vitest run",
16
16
  "test:watch": "vitest"
17
17
  },
18
- "version": "0.0.13-nightly.20240605.0",
18
+ "version": "0.0.13",
19
19
  "license": "MIT",
20
20
  "repository": {
21
21
  "type": "git",
@@ -28,7 +28,6 @@
28
28
  "homepage": "https://github.com/etrepum/lexical-builder",
29
29
  "dependencies": {
30
30
  "@etrepum/lexical-builder": "*",
31
- "@repo/typescript-config": "*",
32
31
  "emoji-datasource-facebook": "15.1.2"
33
32
  },
34
33
  "peerDependencies": {
@@ -1,66 +0,0 @@
1
- import { definePlan as p, safeCast as u } from "@etrepum/lexical-builder";
2
- import { mergeRegister as g } from "@lexical/utils";
3
- import { TextNode as d } from "lexical";
4
- class r extends d {
5
- static getType() {
6
- return "emoji";
7
- }
8
- static clone(e) {
9
- return new r(e.__text, e.__key);
10
- }
11
- static importJSON(e) {
12
- return j(e.text);
13
- }
14
- exportJSON() {
15
- return {
16
- ...super.exportJSON(),
17
- type: "emoji"
18
- };
19
- }
20
- }
21
- function j(t) {
22
- return new r(t).setMode("token");
23
- }
24
- function f(t) {
25
- return Array.from(
26
- t,
27
- (e) => e.codePointAt(0).toString(16).padStart(4, "0")
28
- ).join("-");
29
- }
30
- const x = "@etrepum/lexical-builder/emoji-plan", L = p({
31
- config: u({
32
- emojiBaseUrl: "https://cdn.jsdelivr.net/npm/@etrepum/lexical-emoji-plan@0.0.13-nightly.20240605.0/dist/emoji",
33
- emojiClass: "emoji-node",
34
- emojiLoadedClass: "emoji-node-loaded"
35
- }),
36
- name: x,
37
- nodes: [r],
38
- register(t, e, s) {
39
- let n = t.registerMutationListener(r, (i) => {
40
- for (const [l, c] of i)
41
- if (c !== "destroyed") {
42
- const o = t.getElementByKey(l);
43
- if (o) {
44
- const a = `${e.emojiBaseUrl}/${f(o.innerText)}.png`;
45
- o.classList.add(e.emojiClass), o.style.backgroundImage = `url(${a})`;
46
- const m = new Image();
47
- m.addEventListener(
48
- "load",
49
- () => o.classList.add(e.emojiLoadedClass),
50
- { signal: s.signal, once: !0 }
51
- ), m.src = a;
52
- }
53
- }
54
- });
55
- return import("./_textNodeTransform-B5xhH7gd.js").then(({ $textNodeTransform: i }) => {
56
- s.signal.aborted || (n = g(
57
- n,
58
- t.registerNodeTransform(d, i)
59
- ));
60
- }), () => n();
61
- }
62
- });
63
- export {
64
- j as $,
65
- L as E
66
- };