@lofcz/platejs-emoji 52.0.15

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 ADDED
@@ -0,0 +1,24 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) Ziad Beyens, Dylan Schiemann, Joe Anderson, Felix Feng
4
+
5
+ Unless otherwise specified in a LICENSE file within an individual package directory,
6
+ this license applies to all files in this repository outside of those package directories.
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Plate emoji plugin
2
+
3
+ This package implements the emoji plugin for Plate.
4
+
5
+ ## Documentation
6
+
7
+ Check out [Emoji](https://platejs.org/docs/emoji).
8
+
9
+ ## License
10
+
11
+ [MIT](../../LICENSE)
@@ -0,0 +1,362 @@
1
+ import { withTriggerCombobox } from "@platejs/combobox";
2
+ import { KEYS, createSlatePlugin, createTSlatePlugin } from "platejs";
3
+
4
+ //#region src/lib/types.ts
5
+ const EmojiCategory = {
6
+ Activity: "activity",
7
+ Custom: "custom",
8
+ Flags: "flags",
9
+ Foods: "foods",
10
+ Frequent: "frequent",
11
+ Nature: "nature",
12
+ Objects: "objects",
13
+ People: "people",
14
+ Places: "places",
15
+ Symbols: "symbols"
16
+ };
17
+
18
+ //#endregion
19
+ //#region src/lib/constants.ts
20
+ const EMOJI_MAX_SEARCH_RESULT = 60;
21
+ const DEFAULT_EMOJI_LIBRARY = {
22
+ aliases: {},
23
+ categories: [{
24
+ id: "people",
25
+ emojis: ["+1"]
26
+ }],
27
+ emojis: { "+1": {
28
+ id: "+1",
29
+ keywords: [],
30
+ name: "Thumbs Up",
31
+ skins: [
32
+ {
33
+ native: "👍",
34
+ unified: "1f44d"
35
+ },
36
+ {
37
+ native: "👍🏻",
38
+ unified: "1f44d-1f3fb"
39
+ },
40
+ {
41
+ native: "👍🏼",
42
+ unified: "1f44d-1f3fc"
43
+ },
44
+ {
45
+ native: "👍🏽",
46
+ unified: "1f44d-1f3fd"
47
+ },
48
+ {
49
+ native: "👍🏾",
50
+ unified: "1f44d-1f3fe"
51
+ },
52
+ {
53
+ native: "👍🏿",
54
+ unified: "1f44d-1f3ff"
55
+ }
56
+ ],
57
+ version: 1
58
+ } },
59
+ sheet: {
60
+ cols: 1,
61
+ rows: 1
62
+ }
63
+ };
64
+ const defaultCategories = [
65
+ EmojiCategory.People,
66
+ EmojiCategory.Nature,
67
+ EmojiCategory.Foods,
68
+ EmojiCategory.Activity,
69
+ EmojiCategory.Places,
70
+ EmojiCategory.Objects,
71
+ EmojiCategory.Symbols,
72
+ EmojiCategory.Flags
73
+ ];
74
+ const EmojiSettings = {
75
+ buttonSize: { value: 36 },
76
+ categories: { value: void 0 },
77
+ perLine: { value: 8 },
78
+ showFrequent: {
79
+ limit: 16,
80
+ value: true
81
+ }
82
+ };
83
+ const DEFAULT_FREQUENTLY_USED_EMOJI = {
84
+ "+1": 1,
85
+ clap: 1,
86
+ grinning: 1,
87
+ heart: 1,
88
+ heart_eyes: 1,
89
+ hugging_face: 1,
90
+ joy: 1,
91
+ kissing_heart: 1,
92
+ laughing: 1,
93
+ pray: 1,
94
+ rocket: 1,
95
+ scream: 1,
96
+ see_no_evil: 1
97
+ };
98
+ const NUM_OF_CATEGORIES = Object.values(EmojiCategory).length;
99
+ const i18n = {
100
+ categories: {
101
+ activity: "Activity",
102
+ custom: "Custom",
103
+ flags: "Flags",
104
+ foods: "Food & Drink",
105
+ frequent: "Frequently used",
106
+ nature: "Animals & Nature",
107
+ objects: "Objects",
108
+ people: "Smileys & People",
109
+ places: "Travel & Places",
110
+ symbols: "Symbols"
111
+ },
112
+ clear: "Clear",
113
+ pick: "Pick an emoji...",
114
+ search: "Search all emoji",
115
+ searchNoResultsSubtitle: "That emoji couldn’t be found",
116
+ searchNoResultsTitle: "Oh no!",
117
+ searchResult: "Search Results",
118
+ skins: {
119
+ "1": "Default",
120
+ "2": "Light",
121
+ "3": "Medium-Light",
122
+ "4": "Medium",
123
+ "5": "Medium-Dark",
124
+ "6": "Dark",
125
+ choose: "Choose default skin tone"
126
+ }
127
+ };
128
+
129
+ //#endregion
130
+ //#region src/lib/BaseEmojiPlugin.ts
131
+ const BaseEmojiInputPlugin = createSlatePlugin({
132
+ key: KEYS.emojiInput,
133
+ editOnly: true,
134
+ node: {
135
+ isElement: true,
136
+ isInline: true,
137
+ isVoid: true
138
+ }
139
+ });
140
+ const BaseEmojiPlugin = createTSlatePlugin({
141
+ key: KEYS.emoji,
142
+ editOnly: true,
143
+ options: {
144
+ data: DEFAULT_EMOJI_LIBRARY,
145
+ trigger: ":",
146
+ triggerPreviousCharPattern: /^\s?$/,
147
+ createComboboxInput: () => ({
148
+ children: [{ text: "" }],
149
+ type: KEYS.emojiInput
150
+ }),
151
+ createEmojiNode: ({ skins }) => ({ text: skins[0].native })
152
+ },
153
+ plugins: [BaseEmojiInputPlugin]
154
+ }).overrideEditor(withTriggerCombobox);
155
+
156
+ //#endregion
157
+ //#region src/lib/transforms/insertEmoji.ts
158
+ const insertEmoji = (editor, emoji) => {
159
+ const { createEmojiNode } = editor.getOptions(BaseEmojiPlugin);
160
+ const emojiNode = createEmojiNode(emoji);
161
+ editor.tf.insertNodes(emojiNode);
162
+ };
163
+
164
+ //#endregion
165
+ //#region src/lib/utils/EmojiLibrary/EmojiInlineLibrary.ts
166
+ var EmojiInlineLibrary = class {
167
+ _emojis;
168
+ _hash = {};
169
+ _keys = [];
170
+ constructor(library = DEFAULT_EMOJI_LIBRARY) {
171
+ this._emojis = library.emojis;
172
+ this.init();
173
+ }
174
+ createSearchableString(emoji) {
175
+ const { id, keywords, name } = emoji;
176
+ return `${id},${this.getName(name)},${keywords.join(",")}`;
177
+ }
178
+ getName(name) {
179
+ return name.toLowerCase().split(" ").join(",");
180
+ }
181
+ init() {
182
+ Object.values(this._emojis).forEach((emoji) => {
183
+ const searchableString = this.createSearchableString(emoji);
184
+ this._keys.push(searchableString);
185
+ this._hash[searchableString] = emoji.id;
186
+ });
187
+ }
188
+ getEmoji(id) {
189
+ return this._emojis[id];
190
+ }
191
+ getEmojiId(key) {
192
+ return this._hash[key];
193
+ }
194
+ get keys() {
195
+ return this._keys;
196
+ }
197
+ };
198
+
199
+ //#endregion
200
+ //#region src/lib/utils/Grid/Grid.ts
201
+ var Grid = class {
202
+ grid = /* @__PURE__ */ new Map();
203
+ rowsCount = 1;
204
+ sectionsIds = [];
205
+ addSection(sectionId, section, elements) {
206
+ section.setIndexRowStart(this.rowsCount).addElements(elements[sectionId]);
207
+ this.rowsCount += section.rowsNum;
208
+ this.grid.set(sectionId, section);
209
+ this.sectionsIds.push(sectionId);
210
+ return this;
211
+ }
212
+ indexOf(sectionId) {
213
+ return this.sectionsIds.indexOf(sectionId);
214
+ }
215
+ section(sectionId) {
216
+ return this.grid.get(sectionId);
217
+ }
218
+ sections() {
219
+ return Array.from(this.grid.values());
220
+ }
221
+ updateSection(sectionId, elements) {
222
+ if (this.grid.has(sectionId)) this.grid.get(sectionId).updateElements(elements);
223
+ return this;
224
+ }
225
+ get size() {
226
+ return this.grid.size;
227
+ }
228
+ };
229
+
230
+ //#endregion
231
+ //#region src/lib/utils/Grid/GridSection.ts
232
+ var AGridSection = class {
233
+ _indexRowStart = 0;
234
+ _root;
235
+ _rowsNum = 0;
236
+ rows = [];
237
+ _id;
238
+ perLine;
239
+ constructor(_id, perLine = 8) {
240
+ this._id = _id;
241
+ this.perLine = perLine;
242
+ this.createRootRef();
243
+ }
244
+ addRow(elements, lastPosition) {
245
+ const start = lastPosition * this.perLine;
246
+ const end = start + this.perLine;
247
+ this.rows.push({
248
+ id: this._indexRowStart + lastPosition,
249
+ elements: elements.slice(start, end)
250
+ });
251
+ }
252
+ initRows(elements) {
253
+ let i = 0;
254
+ while (i < this.rowsNum) this.addRow(elements, i++);
255
+ }
256
+ addElements(elements) {
257
+ this._rowsNum = Math.ceil(elements.length / this.perLine);
258
+ this.initRows(elements);
259
+ return this;
260
+ }
261
+ getRows() {
262
+ return this.rows;
263
+ }
264
+ setIndexRowStart(start) {
265
+ this._indexRowStart = start;
266
+ return this;
267
+ }
268
+ updateElements(elements) {
269
+ this.rows = [];
270
+ this.addElements(elements);
271
+ return this;
272
+ }
273
+ get id() {
274
+ return this._id;
275
+ }
276
+ get root() {
277
+ return this._root;
278
+ }
279
+ get rowsNum() {
280
+ return this._rowsNum;
281
+ }
282
+ };
283
+
284
+ //#endregion
285
+ //#region src/lib/utils/IndexSearch/IndexSearch.ts
286
+ var AIndexSearch = class {
287
+ input;
288
+ maxResult = EMOJI_MAX_SEARCH_RESULT;
289
+ result = [];
290
+ scores = {};
291
+ library;
292
+ constructor(library) {
293
+ this.library = library;
294
+ }
295
+ createSearchResult(value) {
296
+ this.scores = {};
297
+ this.result = [];
298
+ for (const key of this.library.keys) {
299
+ const score = key.indexOf(`${value}`);
300
+ if (score === -1) continue;
301
+ const emojiId = this.library.getEmojiId(key);
302
+ this.result.push(emojiId);
303
+ if (!this.scores[emojiId]) this.scores[emojiId] = 0;
304
+ this.scores[emojiId] += emojiId === value ? 0 : score + 1;
305
+ }
306
+ }
307
+ sortResultByScores(result, scores) {
308
+ result.sort((a, b) => {
309
+ const aScore = scores[a];
310
+ const bScore = scores[b];
311
+ if (aScore === bScore) return a.localeCompare(b);
312
+ return aScore - bScore;
313
+ });
314
+ }
315
+ get() {
316
+ const emojis = [];
317
+ for (const key of this.result) {
318
+ const emoji = this.library?.getEmoji(key);
319
+ if (emoji) emojis.push(emoji);
320
+ if (emojis.length >= this.maxResult) break;
321
+ }
322
+ return emojis;
323
+ }
324
+ getEmoji() {
325
+ return this.get()[0];
326
+ }
327
+ hasFound(exact = false) {
328
+ if (exact && this.input) return this.result.includes(this.input);
329
+ return this.result.length > 0;
330
+ }
331
+ search(input) {
332
+ this.input = input.toLowerCase();
333
+ const value = this.input;
334
+ if (value) {
335
+ this.createSearchResult(value);
336
+ this.sortResultByScores(this.result, this.scores);
337
+ } else {
338
+ this.scores = {};
339
+ this.result = [];
340
+ }
341
+ return this;
342
+ }
343
+ };
344
+
345
+ //#endregion
346
+ //#region src/lib/utils/IndexSearch/EmojiFloatingIndexSearch.ts
347
+ var EmojiFloatingIndexSearch = class EmojiFloatingIndexSearch extends AIndexSearch {
348
+ static instance;
349
+ library;
350
+ constructor(library) {
351
+ super(library);
352
+ this.library = library;
353
+ }
354
+ static getInstance(library) {
355
+ if (!EmojiFloatingIndexSearch.instance) EmojiFloatingIndexSearch.instance = new EmojiFloatingIndexSearch(library);
356
+ return EmojiFloatingIndexSearch.instance;
357
+ }
358
+ };
359
+
360
+ //#endregion
361
+ export { EmojiInlineLibrary as a, BaseEmojiPlugin as c, EMOJI_MAX_SEARCH_RESULT as d, EmojiSettings as f, EmojiCategory as g, i18n as h, Grid as i, DEFAULT_EMOJI_LIBRARY as l, defaultCategories as m, AIndexSearch as n, insertEmoji as o, NUM_OF_CATEGORIES as p, AGridSection as r, BaseEmojiInputPlugin as s, EmojiFloatingIndexSearch as t, DEFAULT_FREQUENTLY_USED_EMOJI as u };
362
+ //# sourceMappingURL=EmojiFloatingIndexSearch-BNdEWk-b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmojiFloatingIndexSearch-BNdEWk-b.js","names":["EmojiSettingsType","buttonSize","value","categories","EmojiCategoryList","perLine","showFrequent","key","limit","prefix","ReverseMap","T","EmojiCategory","Activity","Custom","Flags","Foods","Frequent","Nature","Objects","People","Places","Symbols","const","EmojiIconList","Record","outline","solid","search","delete","loupe","FrequentEmojis","i18nProps","clear","pick","searchNoResultsSubtitle","searchNoResultsTitle","searchResult","skins","EmojiMartData","EmojiCategoryList","EmojiSettingsType","FrequentEmojis","i18nProps","EmojiCategory","EMOJI_MAX_SEARCH_RESULT","DEFAULT_EMOJI_LIBRARY","aliases","categories","id","emojis","keywords","name","skins","native","unified","version","sheet","cols","rows","defaultCategories","People","Nature","Foods","Activity","Places","Objects","Symbols","Flags","EmojiSettings","buttonSize","value","undefined","perLine","showFrequent","limit","DEFAULT_FREQUENTLY_USED_EMOJI","clap","grinning","heart","heart_eyes","hugging_face","joy","kissing_heart","laughing","pray","rocket","scream","see_no_evil","NUM_OF_CATEGORIES","Object","values","length","i18n","activity","custom","flags","foods","frequent","nature","objects","people","places","symbols","clear","pick","search","searchNoResultsSubtitle","searchNoResultsTitle","searchResult","choose","Emoji","EmojiMartData","TriggerComboboxPluginOptions","withTriggerCombobox","Descendant","PluginConfig","createSlatePlugin","createTSlatePlugin","KEYS","DEFAULT_EMOJI_LIBRARY","EmojiInputConfig","data","createEmojiNode","emoji","BaseEmojiInputPlugin","key","emojiInput","editOnly","node","isElement","isInline","isVoid","BaseEmojiPlugin","options","trigger","triggerPreviousCharPattern","createComboboxInput","children","text","type","skins","native","plugins","overrideEditor","Emoji","SlateEditor","BaseEmojiPlugin","insertEmoji","editor","emoji","TEmoji","createEmojiNode","getOptions","emojiNode","tf","insertNodes","Emoji","EmojiLibrary","Emojis","IEmojiLibrary","DEFAULT_EMOJI_LIBRARY","THash","Record","EmojiInlineLibrary","_emojis","_hash","_keys","constructor","library","emojis","init","createSearchableString","emoji","id","keywords","name","getName","join","toLowerCase","split","Object","values","forEach","searchableString","push","getEmoji","getEmojiId","key","keys","GridElements","IGrid","IGridSection","SectionElements","SectionId","Grid","R","T","grid","Map","rowsCount","sectionsIds","addSection","sectionId","section","elements","setIndexRowStart","addElements","rowsNum","set","push","indexOf","get","sections","Array","from","values","updateSection","has","updateElements","size","GridRows","IGridSection","SectionElements","SectionId","Unknown","AGridSection","R","T","_indexRowStart","_root","_rowsNum","rows","_id","perLine","constructor","createRootRef","addRow","elements","lastPosition","start","end","push","id","slice","initRows","i","rowsNum","addElements","Math","ceil","length","getRows","setIndexRowStart","updateElements","root","Emoji","IEmojiLibrary","EMOJI_MAX_SEARCH_RESULT","IIndexSearch","get","hasFound","search","input","AIndexSearch","maxResult","result","scores","library","constructor","createSearchResult","value","key","keys","score","indexOf","emojiId","getEmojiId","push","sortResultByScores","sort","a","b","aScore","bScore","localeCompare","emojis","emoji","getEmoji","length","exact","includes","toLowerCase","IEmojiLibrary","AIndexSearch","EmojiFloatingIndexSearch","instance","library","constructor","getInstance"],"sources":["../src/lib/types.ts","../src/lib/constants.ts","../src/lib/BaseEmojiPlugin.ts","../src/lib/transforms/insertEmoji.ts","../src/lib/utils/EmojiLibrary/EmojiInlineLibrary.ts","../src/lib/utils/Grid/Grid.ts","../src/lib/utils/Grid/GridSection.ts","../src/lib/utils/IndexSearch/IndexSearch.ts","../src/lib/utils/IndexSearch/EmojiFloatingIndexSearch.ts"],"sourcesContent":["export type EmojiSettingsType = {\n buttonSize: {\n value: number;\n };\n categories: {\n value?: EmojiCategoryList[];\n };\n perLine: {\n value: number;\n };\n showFrequent: {\n value: boolean;\n key?: string;\n limit?: number;\n prefix?: string;\n };\n};\n\ntype ReverseMap<T> = T[keyof T];\n\nexport const EmojiCategory = {\n Activity: 'activity',\n Custom: 'custom',\n Flags: 'flags',\n Foods: 'foods',\n Frequent: 'frequent',\n Nature: 'nature',\n Objects: 'objects',\n People: 'people',\n Places: 'places',\n Symbols: 'symbols',\n} as const;\n\nexport type EmojiCategoryList = ReverseMap<typeof EmojiCategory>;\n\nexport type EmojiIconList<T = string> = {\n categories: Record<EmojiCategoryList, { outline: T; solid: T }>;\n search: {\n delete: T;\n loupe: T;\n };\n};\n\nexport type FrequentEmojis = Record<string, number>;\n\nexport type i18nProps = {\n categories: Record<EmojiCategoryList, string>;\n clear: string;\n pick: string;\n search: string;\n searchNoResultsSubtitle: string;\n searchNoResultsTitle: string;\n searchResult: string;\n skins: Record<'1' | '2' | '3' | '4' | '5' | '6' | 'choose', string>;\n};\n","import type { EmojiMartData } from '@emoji-mart/data';\n\nimport {\n type EmojiCategoryList,\n type EmojiSettingsType,\n type FrequentEmojis,\n type i18nProps,\n EmojiCategory,\n} from './types';\n\nexport const EMOJI_MAX_SEARCH_RESULT = 60;\n\nexport const DEFAULT_EMOJI_LIBRARY: EmojiMartData = {\n aliases: {},\n categories: [\n {\n id: 'people',\n emojis: ['+1'],\n },\n ],\n emojis: {\n '+1': {\n id: '+1',\n keywords: [],\n name: 'Thumbs Up',\n skins: [\n {\n native: '👍',\n unified: '1f44d',\n },\n {\n native: '👍🏻',\n unified: '1f44d-1f3fb',\n },\n {\n native: '👍🏼',\n unified: '1f44d-1f3fc',\n },\n {\n native: '👍🏽',\n unified: '1f44d-1f3fd',\n },\n {\n native: '👍🏾',\n unified: '1f44d-1f3fe',\n },\n {\n native: '👍🏿',\n unified: '1f44d-1f3ff',\n },\n ],\n version: 1,\n },\n },\n sheet: {\n cols: 1,\n rows: 1,\n },\n};\n\nexport const defaultCategories: EmojiCategoryList[] = [\n EmojiCategory.People,\n EmojiCategory.Nature,\n EmojiCategory.Foods,\n EmojiCategory.Activity,\n EmojiCategory.Places,\n EmojiCategory.Objects,\n EmojiCategory.Symbols,\n EmojiCategory.Flags,\n];\n\nexport const EmojiSettings: EmojiSettingsType = {\n buttonSize: {\n value: 36,\n },\n categories: {\n value: undefined,\n },\n perLine: {\n value: 8,\n },\n showFrequent: {\n limit: 16,\n value: true,\n },\n};\n\nexport const DEFAULT_FREQUENTLY_USED_EMOJI: FrequentEmojis = {\n '+1': 1,\n clap: 1,\n grinning: 1,\n heart: 1,\n heart_eyes: 1,\n hugging_face: 1,\n joy: 1,\n kissing_heart: 1,\n laughing: 1,\n pray: 1,\n rocket: 1,\n scream: 1,\n see_no_evil: 1,\n};\n\nexport const NUM_OF_CATEGORIES = Object.values(EmojiCategory).length;\n\nexport const i18n: i18nProps = {\n categories: {\n activity: 'Activity',\n custom: 'Custom',\n flags: 'Flags',\n foods: 'Food & Drink',\n frequent: 'Frequently used',\n nature: 'Animals & Nature',\n objects: 'Objects',\n people: 'Smileys & People',\n places: 'Travel & Places',\n symbols: 'Symbols',\n },\n clear: 'Clear',\n pick: 'Pick an emoji...',\n search: 'Search all emoji',\n searchNoResultsSubtitle: 'That emoji couldn’t be found',\n searchNoResultsTitle: 'Oh no!',\n searchResult: 'Search Results',\n skins: {\n '1': 'Default',\n '2': 'Light',\n '3': 'Medium-Light',\n '4': 'Medium',\n '5': 'Medium-Dark',\n '6': 'Dark',\n choose: 'Choose default skin tone',\n },\n};\n","import type { Emoji, EmojiMartData } from '@emoji-mart/data';\n\nimport {\n type TriggerComboboxPluginOptions,\n withTriggerCombobox,\n} from '@platejs/combobox';\nimport {\n type Descendant,\n type PluginConfig,\n createSlatePlugin,\n createTSlatePlugin,\n KEYS,\n} from 'platejs';\n\nimport { DEFAULT_EMOJI_LIBRARY } from './constants';\n\nexport type EmojiInputConfig = PluginConfig<\n 'emoji',\n {\n /**\n * The emoji data.\n *\n * @example\n * import emojiMartData from '@emoji-mart/data';\n */\n data?: EmojiMartData;\n createEmojiNode?: (emoji: Emoji) => Descendant;\n } & TriggerComboboxPluginOptions\n>;\n\nexport const BaseEmojiInputPlugin = createSlatePlugin({\n key: KEYS.emojiInput,\n editOnly: true,\n node: { isElement: true, isInline: true, isVoid: true },\n});\n\nexport const BaseEmojiPlugin = createTSlatePlugin<EmojiInputConfig>({\n key: KEYS.emoji,\n editOnly: true,\n options: {\n data: DEFAULT_EMOJI_LIBRARY,\n trigger: ':',\n triggerPreviousCharPattern: /^\\s?$/,\n createComboboxInput: () => ({\n children: [{ text: '' }],\n type: KEYS.emojiInput,\n }),\n createEmojiNode: ({ skins }) => ({ text: skins[0].native }),\n },\n plugins: [BaseEmojiInputPlugin],\n}).overrideEditor(withTriggerCombobox);\n","import type { Emoji } from '@emoji-mart/data';\nimport type { SlateEditor } from 'platejs';\n\nimport { BaseEmojiPlugin } from '../BaseEmojiPlugin';\n\nexport const insertEmoji = <TEmoji extends Emoji = Emoji>(\n editor: SlateEditor,\n emoji: TEmoji\n) => {\n const { createEmojiNode } = editor.getOptions(BaseEmojiPlugin);\n\n const emojiNode = createEmojiNode!(emoji);\n editor.tf.insertNodes(emojiNode);\n};\n","import type {\n Emoji,\n EmojiLibrary,\n Emojis,\n IEmojiLibrary,\n} from './EmojiLibrary.types';\n\nimport { DEFAULT_EMOJI_LIBRARY } from '../../constants';\n\nexport type THash = Record<string, string>;\n\nexport class EmojiInlineLibrary implements IEmojiLibrary {\n protected _emojis: Emojis;\n protected _hash: THash = {};\n protected _keys: string[] = [];\n\n constructor(library: EmojiLibrary = DEFAULT_EMOJI_LIBRARY) {\n this._emojis = library.emojis;\n this.init();\n }\n\n private createSearchableString(emoji: Emoji) {\n const { id, keywords, name } = emoji;\n\n return `${id},${this.getName(name)},${keywords.join(',')}`;\n }\n\n private getName(name: string) {\n return name.toLowerCase().split(' ').join(',');\n }\n\n private init() {\n Object.values(this._emojis).forEach((emoji) => {\n const searchableString = this.createSearchableString(emoji);\n this._keys.push(searchableString);\n this._hash[searchableString] = emoji.id;\n });\n }\n\n getEmoji(id: string) {\n return this._emojis[id];\n }\n\n getEmojiId(key: string) {\n return this._hash[key];\n }\n\n get keys(): string[] {\n return this._keys;\n }\n}\n","import type {\n GridElements,\n IGrid,\n IGridSection,\n SectionElements,\n SectionId,\n} from './Grid.types';\n\nexport class Grid<R, T extends SectionId = SectionId> implements IGrid<R, T> {\n protected grid = new Map<T, IGridSection<R, T>>();\n protected rowsCount = 1;\n protected sectionsIds: T[] = [];\n\n addSection(\n sectionId: T,\n section: IGridSection<R, T>,\n elements: GridElements\n ) {\n section.setIndexRowStart(this.rowsCount).addElements(elements[sectionId]);\n this.rowsCount += section.rowsNum;\n this.grid.set(sectionId, section);\n this.sectionsIds.push(sectionId);\n\n return this;\n }\n\n indexOf(sectionId: T) {\n return this.sectionsIds.indexOf(sectionId);\n }\n\n section(sectionId: T) {\n return this.grid.get(sectionId)!;\n }\n\n sections() {\n return Array.from(this.grid.values());\n }\n\n updateSection(sectionId: T, elements: SectionElements) {\n if (this.grid.has(sectionId)) {\n const section = this.grid.get(sectionId);\n section!.updateElements(elements);\n }\n\n return this;\n }\n\n get size() {\n return this.grid.size;\n }\n}\n","import type {\n GridRows,\n IGridSection,\n SectionElements,\n SectionId,\n Unknown,\n} from './Grid.types';\n\nexport abstract class AGridSection<R extends Unknown, T = SectionId>\n implements IGridSection<R, T>\n{\n protected _indexRowStart = 0;\n protected _root!: R;\n protected _rowsNum = 0;\n protected rows: GridRows = [];\n protected _id: T;\n protected perLine: number;\n\n constructor(_id: T, perLine = 8) {\n this._id = _id;\n this.perLine = perLine;\n this.createRootRef();\n }\n\n private addRow(elements: SectionElements, lastPosition: number) {\n const start = lastPosition * this.perLine;\n const end = start + this.perLine;\n this.rows.push({\n id: this._indexRowStart + lastPosition,\n elements: elements.slice(start, end),\n });\n }\n\n private initRows(elements: SectionElements) {\n let i = 0;\n\n while (i < this.rowsNum) {\n this.addRow(elements, i++);\n }\n }\n\n protected abstract createRootRef(): void;\n\n addElements(elements: SectionElements) {\n this._rowsNum = Math.ceil(elements.length / this.perLine);\n this.initRows(elements);\n\n return this;\n }\n\n getRows() {\n return this.rows;\n }\n\n setIndexRowStart(start: number) {\n this._indexRowStart = start;\n\n return this;\n }\n\n updateElements(elements: SectionElements) {\n this.rows = [];\n this.addElements(elements);\n\n return this;\n }\n\n get id() {\n return this._id;\n }\n\n get root(): R {\n return this._root;\n }\n\n get rowsNum() {\n return this._rowsNum;\n }\n}\n","import type { Emoji } from '@emoji-mart/data';\n\nimport type { IEmojiLibrary } from '../EmojiLibrary';\n\nimport { EMOJI_MAX_SEARCH_RESULT } from '../../constants';\n\ntype IIndexSearch = {\n get: () => Emoji[];\n hasFound: () => boolean;\n search: (input: string) => void;\n};\n\nexport abstract class AIndexSearch implements IIndexSearch {\n protected input: string | undefined;\n protected maxResult = EMOJI_MAX_SEARCH_RESULT;\n protected result: string[] = [];\n protected scores = {};\n protected library: IEmojiLibrary;\n\n protected constructor(library: IEmojiLibrary) {\n this.library = library;\n }\n\n private createSearchResult(value: string) {\n this.scores = {};\n this.result = [];\n\n for (const key of this.library!.keys) {\n const score = key.indexOf(`${value}`);\n\n if (score === -1) continue;\n\n const emojiId = this.library!.getEmojiId(key);\n this.result.push(emojiId);\n\n if (!(this.scores as any)[emojiId]) {\n (this.scores as any)[emojiId] = 0;\n }\n (this.scores as any)[emojiId] += emojiId === value ? 0 : score + 1;\n }\n }\n\n private sortResultByScores(result: string[], scores: {}) {\n result.sort((a, b) => {\n const aScore = (scores as any)[a];\n const bScore = (scores as any)[b];\n\n if (aScore === bScore) {\n return a.localeCompare(b);\n }\n\n return aScore - bScore;\n });\n }\n\n get(): Emoji[] {\n const emojis: Emoji[] = [];\n\n for (const key of this.result) {\n const emoji = this.library?.getEmoji(key);\n\n if (emoji) {\n emojis.push(emoji);\n }\n if (emojis.length >= this.maxResult) break;\n }\n\n return emojis;\n }\n\n getEmoji(): Emoji | undefined {\n return this.get()[0];\n }\n\n hasFound(exact = false) {\n if (exact && this.input) {\n return this.result.includes(this.input);\n }\n\n return this.result.length > 0;\n }\n\n search(input: string): this {\n this.input = input.toLowerCase();\n const value = this.input;\n\n if (value) {\n this.createSearchResult(value);\n this.sortResultByScores(this.result, this.scores);\n } else {\n this.scores = {};\n this.result = [];\n }\n\n return this;\n }\n}\n","import type { IEmojiLibrary } from '../EmojiLibrary';\n\nimport { AIndexSearch } from './IndexSearch';\n\nexport class EmojiFloatingIndexSearch extends AIndexSearch {\n protected static instance?: EmojiFloatingIndexSearch;\n protected library: IEmojiLibrary;\n\n private constructor(library: IEmojiLibrary) {\n super(library);\n this.library = library;\n }\n\n static getInstance(library: IEmojiLibrary) {\n if (!EmojiFloatingIndexSearch.instance) {\n EmojiFloatingIndexSearch.instance = new EmojiFloatingIndexSearch(library);\n }\n\n return EmojiFloatingIndexSearch.instance;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ import { TriggerComboboxPluginOptions } from "@platejs/combobox";
2
+ import { Descendant, PluginConfig, SlateEditor } from "platejs";
3
+ import { Emoji, Emoji as Emoji$1, EmojiMartData } from "@emoji-mart/data";
4
+
5
+ //#region src/lib/BaseEmojiPlugin.d.ts
6
+ type EmojiInputConfig = PluginConfig<'emoji', {
7
+ /**
8
+ * The emoji data.
9
+ *
10
+ * @example
11
+ * import emojiMartData from '@emoji-mart/data';
12
+ */
13
+ data?: EmojiMartData;
14
+ createEmojiNode?: (emoji: Emoji) => Descendant;
15
+ } & TriggerComboboxPluginOptions>;
16
+ declare const BaseEmojiInputPlugin: any;
17
+ declare const BaseEmojiPlugin: any;
18
+ //#endregion
19
+ //#region src/lib/types.d.ts
20
+ type EmojiSettingsType = {
21
+ buttonSize: {
22
+ value: number;
23
+ };
24
+ categories: {
25
+ value?: EmojiCategoryList[];
26
+ };
27
+ perLine: {
28
+ value: number;
29
+ };
30
+ showFrequent: {
31
+ value: boolean;
32
+ key?: string;
33
+ limit?: number;
34
+ prefix?: string;
35
+ };
36
+ };
37
+ type ReverseMap<T> = T[keyof T];
38
+ declare const EmojiCategory: {
39
+ readonly Activity: "activity";
40
+ readonly Custom: "custom";
41
+ readonly Flags: "flags";
42
+ readonly Foods: "foods";
43
+ readonly Frequent: "frequent";
44
+ readonly Nature: "nature";
45
+ readonly Objects: "objects";
46
+ readonly People: "people";
47
+ readonly Places: "places";
48
+ readonly Symbols: "symbols";
49
+ };
50
+ type EmojiCategoryList = ReverseMap<typeof EmojiCategory>;
51
+ type EmojiIconList<T = string> = {
52
+ categories: Record<EmojiCategoryList, {
53
+ outline: T;
54
+ solid: T;
55
+ }>;
56
+ search: {
57
+ delete: T;
58
+ loupe: T;
59
+ };
60
+ };
61
+ type FrequentEmojis = Record<string, number>;
62
+ type i18nProps = {
63
+ categories: Record<EmojiCategoryList, string>;
64
+ clear: string;
65
+ pick: string;
66
+ search: string;
67
+ searchNoResultsSubtitle: string;
68
+ searchNoResultsTitle: string;
69
+ searchResult: string;
70
+ skins: Record<'1' | '2' | '3' | '4' | '5' | '6' | 'choose', string>;
71
+ };
72
+ //#endregion
73
+ //#region src/lib/constants.d.ts
74
+ declare const EMOJI_MAX_SEARCH_RESULT = 60;
75
+ declare const DEFAULT_EMOJI_LIBRARY: EmojiMartData;
76
+ declare const defaultCategories: EmojiCategoryList[];
77
+ declare const EmojiSettings: EmojiSettingsType;
78
+ declare const DEFAULT_FREQUENTLY_USED_EMOJI: FrequentEmojis;
79
+ declare const NUM_OF_CATEGORIES: number;
80
+ declare const i18n: i18nProps;
81
+ //#endregion
82
+ //#region src/lib/transforms/insertEmoji.d.ts
83
+ declare const insertEmoji: <TEmoji extends Emoji = Emoji>(editor: SlateEditor, emoji: TEmoji) => void;
84
+ //#endregion
85
+ //#region src/lib/utils/EmojiLibrary/EmojiLibrary.types.d.ts
86
+ /**
87
+ * Emoji: type Emoji = { id: string; name: string; keywords: string[]; skins: [
88
+ * { unified: '1f389'; native: '🎉'; shortcodes: ':tada:'; } ]; version: 1; };
89
+ */
90
+ type EmojiLibrary = EmojiMartData;
91
+ type Emojis = Record<string, Emoji>;
92
+ type IEmojiLibrary = {
93
+ keys: string[];
94
+ getEmoji: (key: string) => Emoji;
95
+ getEmojiId: (key: string) => string;
96
+ };
97
+ //#endregion
98
+ //#region src/lib/utils/EmojiLibrary/EmojiInlineLibrary.d.ts
99
+ type THash = Record<string, string>;
100
+ declare class EmojiInlineLibrary implements IEmojiLibrary {
101
+ protected _emojis: Emojis;
102
+ protected _hash: THash;
103
+ protected _keys: string[];
104
+ constructor(library?: EmojiLibrary);
105
+ private createSearchableString;
106
+ private getName;
107
+ private init;
108
+ getEmoji(id: string): Emoji$1;
109
+ getEmojiId(key: string): string;
110
+ get keys(): string[];
111
+ }
112
+ //#endregion
113
+ //#region src/lib/utils/Grid/Grid.types.d.ts
114
+ type GridElements<S extends SectionId = SectionId> = Record<S, string[]>;
115
+ type GridRow = {
116
+ id: number;
117
+ elements: string[];
118
+ };
119
+ type GridRows = GridRow[];
120
+ interface IGrid<R, T extends SectionId> {
121
+ size: number;
122
+ addSection: (sectionId: T, section: IGridSection<R, T>, elements: GridElements) => this;
123
+ indexOf: (sectionId: T) => number;
124
+ section: (sectionId: T) => IGridSection<R, T>;
125
+ sections: () => IGridSection<R, T>[];
126
+ updateSection: (sectionId: T, elements: SectionElements) => this;
127
+ }
128
+ interface IGridSection<R, T> {
129
+ id: T;
130
+ root: R;
131
+ rowsNum: number;
132
+ addElements: (elements: SectionElements) => this;
133
+ getRows: () => GridRows;
134
+ setIndexRowStart: (start: number) => this;
135
+ updateElements: (elements: SectionElements) => this;
136
+ }
137
+ type SectionElements = string[];
138
+ type SectionId = string;
139
+ type Unknown = unknown;
140
+ //#endregion
141
+ //#region src/lib/utils/Grid/Grid.d.ts
142
+ declare class Grid<R, T extends SectionId = SectionId> implements IGrid<R, T> {
143
+ protected grid: Map<T, IGridSection<R, T>>;
144
+ protected rowsCount: number;
145
+ protected sectionsIds: T[];
146
+ addSection(sectionId: T, section: IGridSection<R, T>, elements: GridElements): this;
147
+ indexOf(sectionId: T): number;
148
+ section(sectionId: T): IGridSection<R, T>;
149
+ sections(): IGridSection<R, T>[];
150
+ updateSection(sectionId: T, elements: SectionElements): this;
151
+ get size(): number;
152
+ }
153
+ //#endregion
154
+ //#region src/lib/utils/Grid/GridSection.d.ts
155
+ declare abstract class AGridSection<R extends Unknown, T = SectionId> implements IGridSection<R, T> {
156
+ protected _indexRowStart: number;
157
+ protected _root: R;
158
+ protected _rowsNum: number;
159
+ protected rows: GridRows;
160
+ protected _id: T;
161
+ protected perLine: number;
162
+ constructor(_id: T, perLine?: number);
163
+ private addRow;
164
+ private initRows;
165
+ protected abstract createRootRef(): void;
166
+ addElements(elements: SectionElements): this;
167
+ getRows(): GridRows;
168
+ setIndexRowStart(start: number): this;
169
+ updateElements(elements: SectionElements): this;
170
+ get id(): T;
171
+ get root(): R;
172
+ get rowsNum(): number;
173
+ }
174
+ //#endregion
175
+ //#region src/lib/utils/IndexSearch/IndexSearch.d.ts
176
+ type IIndexSearch = {
177
+ get: () => Emoji[];
178
+ hasFound: () => boolean;
179
+ search: (input: string) => void;
180
+ };
181
+ declare abstract class AIndexSearch implements IIndexSearch {
182
+ protected input: string | undefined;
183
+ protected maxResult: number;
184
+ protected result: string[];
185
+ protected scores: {};
186
+ protected library: IEmojiLibrary;
187
+ protected constructor(library: IEmojiLibrary);
188
+ private createSearchResult;
189
+ private sortResultByScores;
190
+ get(): Emoji[];
191
+ getEmoji(): Emoji | undefined;
192
+ hasFound(exact?: boolean): boolean;
193
+ search(input: string): this;
194
+ }
195
+ //#endregion
196
+ //#region src/lib/utils/IndexSearch/EmojiFloatingIndexSearch.d.ts
197
+ declare class EmojiFloatingIndexSearch extends AIndexSearch {
198
+ protected static instance?: EmojiFloatingIndexSearch;
199
+ protected library: IEmojiLibrary;
200
+ private constructor();
201
+ static getInstance(library: IEmojiLibrary): EmojiFloatingIndexSearch;
202
+ }
203
+ //#endregion
204
+ //#region src/lib/utils/IndexSearch/EmojiInlineIndexSearch.d.ts
205
+ declare class EmojiInlineIndexSearch extends AIndexSearch {
206
+ protected static instance?: EmojiInlineIndexSearch;
207
+ protected library: IEmojiLibrary;
208
+ private constructor();
209
+ static getInstance(data?: EmojiMartData): EmojiInlineIndexSearch;
210
+ }
211
+ //#endregion
212
+ export { EmojiIconList as A, EMOJI_MAX_SEARCH_RESULT as C, i18n as D, defaultCategories as E, BaseEmojiPlugin as F, EmojiInputConfig as I, FrequentEmojis as M, i18nProps as N, EmojiCategory as O, BaseEmojiInputPlugin as P, DEFAULT_FREQUENTLY_USED_EMOJI as S, NUM_OF_CATEGORIES as T, EmojiLibrary as _, Grid as a, insertEmoji as b, GridRows as c, SectionElements as d, SectionId as f, Emoji$1 as g, THash as h, AGridSection as i, EmojiSettingsType as j, EmojiCategoryList as k, IGrid as l, EmojiInlineLibrary as m, EmojiFloatingIndexSearch as n, GridElements as o, Unknown as p, AIndexSearch as r, GridRow as s, EmojiInlineIndexSearch as t, IGridSection as u, Emojis as v, EmojiSettings as w, DEFAULT_EMOJI_LIBRARY as x, IEmojiLibrary as y };
213
+ //# sourceMappingURL=index-QJpfncCa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-QJpfncCa.d.ts","names":[],"sources":["../src/lib/BaseEmojiPlugin.ts","../src/lib/types.ts","../src/lib/constants.ts","../src/lib/transforms/insertEmoji.ts","../src/lib/utils/EmojiLibrary/EmojiLibrary.types.ts","../src/lib/utils/EmojiLibrary/EmojiInlineLibrary.ts","../src/lib/utils/Grid/Grid.types.ts","../src/lib/utils/Grid/Grid.ts","../src/lib/utils/Grid/GridSection.ts","../src/lib/utils/IndexSearch/IndexSearch.ts","../src/lib/utils/IndexSearch/EmojiFloatingIndexSearch.ts","../src/lib/utils/IndexSearch/EmojiInlineIndexSearch.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { A as EmojiIconList, C as EMOJI_MAX_SEARCH_RESULT, D as i18n, E as defaultCategories, F as BaseEmojiPlugin, I as EmojiInputConfig, M as FrequentEmojis, N as i18nProps, O as EmojiCategory, P as BaseEmojiInputPlugin, S as DEFAULT_FREQUENTLY_USED_EMOJI, T as NUM_OF_CATEGORIES, _ as EmojiLibrary, a as Grid, b as insertEmoji, c as GridRows, d as SectionElements, f as SectionId, g as Emoji, h as THash, i as AGridSection, j as EmojiSettingsType, k as EmojiCategoryList, l as IGrid, m as EmojiInlineLibrary, n as EmojiFloatingIndexSearch, o as GridElements, p as Unknown, r as AIndexSearch, s as GridRow, t as EmojiInlineIndexSearch, u as IGridSection, v as Emojis, w as EmojiSettings, x as DEFAULT_EMOJI_LIBRARY, y as IEmojiLibrary } from "./index-QJpfncCa";
2
+ export { AGridSection, AIndexSearch, BaseEmojiInputPlugin, BaseEmojiPlugin, DEFAULT_EMOJI_LIBRARY, DEFAULT_FREQUENTLY_USED_EMOJI, EMOJI_MAX_SEARCH_RESULT, Emoji, EmojiCategory, EmojiCategoryList, EmojiFloatingIndexSearch, EmojiIconList, EmojiInlineIndexSearch, EmojiInlineLibrary, EmojiInputConfig, EmojiLibrary, EmojiSettings, EmojiSettingsType, Emojis, FrequentEmojis, Grid, GridElements, GridRow, GridRows, IEmojiLibrary, IGrid, IGridSection, NUM_OF_CATEGORIES, SectionElements, SectionId, THash, Unknown, defaultCategories, i18n, i18nProps, insertEmoji };