UNPKG

@blocknote/core

Version:

A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.

1 lines 3.4 kB
{"version":3,"file":"extensions.cjs","sources":["../src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts"],"sourcesContent":["import type { Emoji, EmojiMartData } from \"@emoji-mart/data\";\n\nimport { defaultInlineContentSchema } from \"../../blocks/defaultBlocks.js\";\nimport { BlockNoteEditor } from \"../../editor/BlockNoteEditor.js\";\nimport {\n BlockSchema,\n InlineContentSchema,\n StyleSchema,\n} from \"../../schema/index.js\";\nimport { DefaultGridSuggestionItem } from \"./DefaultGridSuggestionItem.js\";\n\n// Temporary fix for https://github.com/missive/emoji-mart/pull/929\nlet emojiLoadingPromise:\n | Promise<{\n emojiMart: typeof import(\"emoji-mart\");\n emojiData: EmojiMartData;\n }>\n | undefined;\n\nasync function loadEmojiMart() {\n if (emojiLoadingPromise) {\n return emojiLoadingPromise;\n }\n\n emojiLoadingPromise = (async () => {\n // load dynamically because emoji-mart doesn't specify type: module and breaks in nodejs\n const [emojiMartModule, emojiDataModule] = await Promise.all([\n import(\"emoji-mart\"),\n // use a dynamic import to encourage bundle-splitting\n // and a smaller initial client bundle size\n import(\"@emoji-mart/data\"),\n ]);\n\n const emojiMart =\n \"default\" in emojiMartModule ? emojiMartModule.default : emojiMartModule;\n const emojiData =\n \"default\" in emojiDataModule\n ? (emojiDataModule.default as EmojiMartData)\n : (emojiDataModule as EmojiMartData);\n\n await emojiMart.init({ data: emojiData });\n\n return { emojiMart, emojiData };\n })();\n\n return emojiLoadingPromise;\n}\n\nexport async function getDefaultEmojiPickerItems<\n BSchema extends BlockSchema,\n I extends InlineContentSchema,\n S extends StyleSchema,\n>(\n editor: BlockNoteEditor<BSchema, I, S>,\n query: string,\n): Promise<DefaultGridSuggestionItem[]> {\n if (\n !(\"text\" in editor.schema.inlineContentSchema) ||\n editor.schema.inlineContentSchema[\"text\"] !==\n defaultInlineContentSchema[\"text\"]\n ) {\n return [];\n }\n\n const { emojiData, emojiMart } = await loadEmojiMart();\n\n const emojisToShow =\n query.trim() === \"\"\n ? Object.values(emojiData.emojis)\n : ((await emojiMart!.SearchIndex.search(query)) as Emoji[]);\n\n return emojisToShow.map((emoji) => ({\n id: emoji.skins[0].native,\n onItemClick: () => editor.insertInlineContent(emoji.skins[0].native + \" \"),\n }));\n}\n"],"names":["emojiLoadingPromise","loadEmojiMart","emojiMartModule","emojiDataModule","emojiMart","emojiData","getDefaultEmojiPickerItems","editor","query","defaultInlineContentSchema","emoji"],"mappings":"8pBAYA,IAAIA,EAOJ,eAAeC,GAAgB,CAC7B,OAAID,IAIJA,GAAuB,SAAY,CAEjC,KAAM,CAACE,EAAiBC,CAAe,EAAI,MAAM,QAAQ,IAAI,CAC3D,OAAO,YAAY,EAGnB,OAAO,kBAAkB,CAAA,CAC1B,EAEKC,EACJ,YAAaF,EAAkBA,EAAgB,QAAUA,EACrDG,EACJ,YAAaF,EACRA,EAAgB,QAChBA,EAEP,aAAMC,EAAU,KAAK,CAAE,KAAMC,EAAW,EAEjC,CAAE,UAAAD,EAAW,UAAAC,CAAA,CACtB,GAAA,EAEOL,EACT,CAEA,eAAsBM,EAKpBC,EACAC,EACsC,CACtC,GACE,EAAE,SAAUD,EAAO,OAAO,sBAC1BA,EAAO,OAAO,oBAAoB,OAChCE,EAAAA,2BAA2B,KAE7B,MAAO,CAAA,EAGT,KAAM,CAAE,UAAAJ,EAAW,UAAAD,CAAA,EAAc,MAAMH,EAAA,EAOvC,OAJEO,EAAM,KAAA,IAAW,GACb,OAAO,OAAOH,EAAU,MAAM,EAC5B,MAAMD,EAAW,YAAY,OAAOI,CAAK,GAE7B,IAAKE,IAAW,CAClC,GAAIA,EAAM,MAAM,CAAC,EAAE,OACnB,YAAa,IAAMH,EAAO,oBAAoBG,EAAM,MAAM,CAAC,EAAE,OAAS,GAAG,CAAA,EACzE,CACJ"}