@atlaskit/editor-plugin-emoji
Version:
Emoji plugin for @atlaskit/editor-core
75 lines (74 loc) • 3.3 kB
TypeScript
import type { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
import type { Command, EditorCommand, NextEditorPlugin, OptionalPlugin, TypeAheadHandler } from '@atlaskit/editor-common/types';
import type { AnalyticsPlugin } from '@atlaskit/editor-plugin-analytics';
import type { InlineCommentInputMethod, InlineCommentMap } from '@atlaskit/editor-plugin-annotation';
import type { BasePlugin } from '@atlaskit/editor-plugin-base';
import type { ConnectivityPlugin } from '@atlaskit/editor-plugin-connectivity';
import type { EditorViewModePluginState } from '@atlaskit/editor-plugin-editor-viewmode';
import type { MetricsPlugin } from '@atlaskit/editor-plugin-metrics';
import type { TypeAheadInputMethod, TypeAheadPlugin } from '@atlaskit/editor-plugin-type-ahead';
import type { SelectionBookmark } from '@atlaskit/editor-prosemirror/state';
import type { EmojiDescription, EmojiId, EmojiProvider, EmojiResourceConfig } from '@atlaskit/emoji';
import type { EmojiNodeDataProvider } from './pm-plugins/providers/EmojiNodeDataProvider';
type SetInlineCommentDraftState = (drafting: boolean, inputMethod: InlineCommentInputMethod) => Command;
type AnnotationPluginType = NextEditorPlugin<'annotation', {
actions: {
setInlineCommentDraftState: SetInlineCommentDraftState;
};
sharedState: {
annotations: InlineCommentMap;
bookmark?: SelectionBookmark;
isVisible: boolean;
mouseData: {
isSelecting: boolean;
};
};
}>;
type EditorViewModePluginType = NextEditorPlugin<'editorViewMode', {
sharedState: EditorViewModePluginState;
}>;
export interface EmojiPluginOptions {
disableAutoformat?: boolean;
emojiNodeDataProvider?: EmojiNodeDataProvider;
emojiProvider?: Promise<EmojiProvider>;
headless?: boolean;
}
export type EmojiPluginState = {
asciiMap?: Map<string, EmojiDescription>;
emojiProvider?: EmojiProvider;
/**
* Occassionally it may be more convenient to deal with the
* promise version of the emoji provider. This is available
* immediately if used for the initial configuration
*/
emojiProviderPromise?: Promise<EmojiProvider>;
emojiResourceConfig?: EmojiResourceConfig;
inlineEmojiPopupOpen?: boolean;
};
export type EmojiPluginSharedState = EmojiPluginState & {
typeAheadHandler: TypeAheadHandler;
};
export type EmojiPluginCommands = {
insertEmoji: (emojiId: EmojiId, inputMethod?: INPUT_METHOD.PICKER | INPUT_METHOD.ASCII | INPUT_METHOD.TYPEAHEAD) => EditorCommand;
};
export type EmojiPluginActions = {
openTypeAhead: (inputMethod: TypeAheadInputMethod) => boolean;
setProvider: (provider: Promise<EmojiProvider>) => Promise<boolean>;
};
export type EmojiPluginDependencies = [
OptionalPlugin<AnalyticsPlugin>,
TypeAheadPlugin,
OptionalPlugin<AnnotationPluginType>,
OptionalPlugin<EditorViewModePluginType>,
OptionalPlugin<BasePlugin>,
OptionalPlugin<MetricsPlugin>,
OptionalPlugin<ConnectivityPlugin>
];
export type EmojiPlugin = NextEditorPlugin<'emoji', {
actions: EmojiPluginActions;
commands: EmojiPluginCommands;
dependencies: EmojiPluginDependencies;
pluginConfiguration: EmojiPluginOptions | undefined;
sharedState: EmojiPluginSharedState | undefined;
}>;
export {};