@lexical/react
Version:
This package provides Lexical components and hooks for React applications.
78 lines (77 loc) • 3.42 kB
TypeScript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import { type AutoEmbedOption, type EmbedConfig } from '@lexical/react/LexicalAutoEmbedPluginUtils';
import { type MenuRenderFn } from '@lexical/react/LexicalNodeMenuPlugin';
import { type CommandListenerPriority } from 'lexical';
import { type JSX } from 'react';
export { AutoEmbedOption, type EmbedConfig, type EmbedMatchResult, INSERT_EMBED_COMMAND, URL_MATCHER, } from '@lexical/react/LexicalAutoEmbedPluginUtils';
type LexicalAutoEmbedPluginProps<TEmbedConfig extends EmbedConfig> = {
/**
* An array of configurations used to insert Embed elements
*/
embedConfigs: TEmbedConfig[];
/**
* Callback for handling the {@link INSERT_EMBED_COMMAND} command.
* If no function is passed, the command is not registered
* @param embedConfig - the config corresponding to the {@link EmbedConfig.type} of the inserted Embed
* @returns
*/
onOpenEmbedModalForConfig?: (embedConfig: TEmbedConfig) => void;
/**
* A function that links a specific configuration to a set of options.
* Each option can be handling by click or press the Enter or Tab key
* when the cursor hovers over it.
* Pass the necessary callbacks to {@link AutoEmbedOption.onSelect}
* @param activeEmbedConfig - the current active config is determined by a match
* from the {@link EmbedConfig.parseUrl} of the inserted AutoLinkNode
* @param embedFn - callback for handling option selection.
* Calling the callback will invoke the {@link EmbedConfig.insertNode} method
* and remove the inserted AutoLinkNode
* @param dismissFn - сallback to deselect. Calling the callback will hide the options menu
* @returns array of options from {@link AutoEmbedOption} instances
*/
getMenuOptions: (activeEmbedConfig: TEmbedConfig, embedFn: () => void, dismissFn: () => void) => AutoEmbedOption[];
/**
* A function for rendering button menu.
* By default, it displays a plain list with the option titles
*/
menuRenderFn?: MenuRenderFn<AutoEmbedOption>;
/**
* Priority for key handling in the menu. The default is `COMMAND_PRIORITY_LOW`
*/
menuCommandPriority?: CommandListenerPriority;
};
/**
* Watches for pasted AutoLink nodes that match any of the provided embed configurations (e.g., YouTube, Twitter URLs).
* When a match is found, it shows a menu offering to replace the link with an embedded node.
*
* You can pass a generic type to the plugin to extend {@link EmbedConfig}
* with additional data in {@link EmbedMatchResult} that will be passed to the callbacks
*
* @example
* Usage
* ```tsx
* interface CustomEmbedConfig extends EmbedConfig<{
* domain: string;
* oid?: string;
* }> {
* // Icon for display.
* icon?: JSX.Element;
* // Embed a Figma Project.
* description?: string;
* };
*
* return (
* <LexicalAutoEmbedPlugin<CustomEmbedConfig>
* embedConfigs={EmbedConfigs}
* getMenuOptions={getMenuOptions}
* />
* );
* ```
*/
export declare function LexicalAutoEmbedPlugin<TEmbedConfig extends EmbedConfig>({ embedConfigs, onOpenEmbedModalForConfig, getMenuOptions, menuRenderFn, menuCommandPriority, }: LexicalAutoEmbedPluginProps<TEmbedConfig>): JSX.Element | null;