import type { IconKey } from '../core/Icon';
import type { RefObject, ReactNode, ComponentType } from 'react';
import type { Options } from 'mdast-util-to-markdown';
import type { Config } from 'mdast-util-from-markdown/lib';
import type { Extension } from 'micromark-util-types';
import type { Content } from 'mdast';
import type { MdastImportVisitor, LexicalVisitor } from '../..';
import type { EditorSubscription, EditorInFocus, BlockType } from '../core';
import type { InitialEditorStateType } from '@lexical/react/LexicalComposer';
import type { JsxComponentDescriptor } from '../jsx';
import type { HistoryState } from '@lexical/history';
import type { SystemSpec, Realm, RealmNode, PluginConstructor, TypedRealm, ValueForKey, SystemKeys, ValuesForKeys, SystemDict } from '../../gurx';
///
import type { RangeSelection, Klass, LexicalNode, TextFormatType, ElementNode, DecoratorNode, LexicalCommand, LexicalEditor } from 'lexical';
import { CreateImageNodeOptions } from './ImageNode';
export * from './ImageNode';
export type ImageUploadHandler = ((image: File) => Promise) | null;
export type ImagePreviewHandler = ((imageSource: string) => Promise) | null;
export interface InsertImageFormValues {
src?: string;
altText?: string;
title?: string;
file: FileList;
}
type InactiveImageDialogState = {
type: 'inactive';
};
type NewImageDialogState = {
type: 'new';
};
type EditingImageDialogState = {
type: 'editing';
nodeKey: string;
initialValues: Omit;
};
/** @internal */
export declare const imageSystem: SystemSpec<[SystemSpec<[], (r: Realm) => {
activeEditor: RealmNode;
inFocus: RealmNode;
historyState: RealmNode;
currentSelection: RealmNode;
jsxIsAvailable: RealmNode;
jsxComponentDescriptors: RealmNode;
initialRootEditorState: RealmNode;
rootEditor: RealmNode;
createRootEditorSubscription: RealmNode;
createActiveEditorSubscription: RealmNode;
importVisitors: RealmNode[]>;
syntaxExtensions: RealmNode;
mdastExtensions: RealmNode<(Partial | Partial[])[] | null | undefined>;
usedLexicalNodes: RealmNode[]>;
addImportVisitor: RealmNode>;
addLexicalNode: RealmNode>;
addSyntaxExtension: RealmNode;
addMdastExtension: RealmNode | Partial[]>;
toMarkdownExtensions: RealmNode;
toMarkdownOptions: RealmNode;
addToMarkdownExtension: RealmNode;
addExportVisitor: RealmNode;
exportVisitors: RealmNode;
initialMarkdown: RealmNode;
setMarkdown: RealmNode;
markdown: RealmNode;
markdownSignal: RealmNode;
editorRootElementRef: RealmNode | null>;
contentEditableClassName: RealmNode;
placeholder: RealmNode;
autoFocus: RealmNode;
readOnly: RealmNode;
composerChildren: RealmNode[]>;
addComposerChild: RealmNode>;
topAreaChildren: RealmNode[]>;
addTopAreaChild: RealmNode>;
nestedEditorChildren: RealmNode[]>;
addNestedEditorChild: RealmNode>;
editorWrappers: RealmNode[]>;
addEditorWrapper: RealmNode>;
currentFormat: RealmNode;
editorInFocus: RealmNode;
applyFormat: RealmNode;
currentBlockType: RealmNode;
applyBlockType: RealmNode;
convertSelectionToNode: RealmNode<() => ElementNode>;
insertDecoratorNode: RealmNode<() => DecoratorNode>;
onBlur: RealmNode;
iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
markdownProcessingError: RealmNode<{
error: string;
source: string;
} | null>;
markdownErrorSignal: RealmNode<{
error: string;
source: string;
}>;
}>], (r: Realm, [{ rootEditor }]: [{
activeEditor: RealmNode;
inFocus: RealmNode;
historyState: RealmNode;
currentSelection: RealmNode;
jsxIsAvailable: RealmNode;
jsxComponentDescriptors: RealmNode;
initialRootEditorState: RealmNode;
rootEditor: RealmNode;
createRootEditorSubscription: RealmNode;
createActiveEditorSubscription: RealmNode;
importVisitors: RealmNode[]>;
syntaxExtensions: RealmNode;
mdastExtensions: RealmNode<(Partial | Partial[])[] | null | undefined>;
usedLexicalNodes: RealmNode[]>;
addImportVisitor: RealmNode>;
addLexicalNode: RealmNode>;
addSyntaxExtension: RealmNode;
addMdastExtension: RealmNode | Partial[]>;
toMarkdownExtensions: RealmNode;
toMarkdownOptions: RealmNode;
addToMarkdownExtension: RealmNode;
addExportVisitor: RealmNode;
exportVisitors: RealmNode;
initialMarkdown: RealmNode;
setMarkdown: RealmNode;
markdown: RealmNode;
markdownSignal: RealmNode;
editorRootElementRef: RealmNode | null>;
contentEditableClassName: RealmNode;
placeholder: RealmNode;
autoFocus: RealmNode;
readOnly: RealmNode;
composerChildren: RealmNode[]>;
addComposerChild: RealmNode>;
topAreaChildren: RealmNode[]>;
addTopAreaChild: RealmNode>;
nestedEditorChildren: RealmNode[]>;
addNestedEditorChild: RealmNode>;
editorWrappers: RealmNode[]>;
addEditorWrapper: RealmNode>;
currentFormat: RealmNode;
editorInFocus: RealmNode;
applyFormat: RealmNode;
currentBlockType: RealmNode;
applyBlockType: RealmNode;
convertSelectionToNode: RealmNode<() => ElementNode>;
insertDecoratorNode: RealmNode<() => DecoratorNode>;
onBlur: RealmNode;
iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
markdownProcessingError: RealmNode<{
error: string;
source: string;
} | null>;
markdownErrorSignal: RealmNode<{
error: string;
source: string;
}>;
}]) => {
imageDialogState: RealmNode;
saveImage: RealmNode;
openNewImageDialog: RealmNode;
openEditImageDialog: RealmNode>;
closeImageDialog: RealmNode;
imageUploadHandler: RealmNode;
imageAutocompleteSuggestions: RealmNode;
disableImageResize: RealmNode;
insertImage: RealmNode;
imagePreviewHandler: RealmNode;
}>;
interface ImagePluginParams {
imageUploadHandler?: ImageUploadHandler;
imageAutocompleteSuggestions?: string[];
disableImageResize?: boolean;
imagePreviewHandler?: ImagePreviewHandler;
}
export declare const
/** @internal */
imagePlugin: PluginConstructor {
activeEditor: RealmNode;
inFocus: RealmNode;
historyState: RealmNode;
currentSelection: RealmNode;
jsxIsAvailable: RealmNode;
jsxComponentDescriptors: RealmNode;
initialRootEditorState: RealmNode;
rootEditor: RealmNode;
createRootEditorSubscription: RealmNode;
createActiveEditorSubscription: RealmNode;
importVisitors: RealmNode[]>;
syntaxExtensions: RealmNode;
mdastExtensions: RealmNode<(Partial | Partial[])[] | null | undefined>;
usedLexicalNodes: RealmNode[]>;
addImportVisitor: RealmNode>;
addLexicalNode: RealmNode>;
addSyntaxExtension: RealmNode;
addMdastExtension: RealmNode | Partial[]>;
toMarkdownExtensions: RealmNode;
toMarkdownOptions: RealmNode;
addToMarkdownExtension: RealmNode;
addExportVisitor: RealmNode;
exportVisitors: RealmNode;
initialMarkdown: RealmNode;
setMarkdown: RealmNode;
markdown: RealmNode;
markdownSignal: RealmNode;
editorRootElementRef: RealmNode | null>;
contentEditableClassName: RealmNode;
placeholder: RealmNode;
autoFocus: RealmNode;
readOnly: RealmNode;
composerChildren: RealmNode[]>;
addComposerChild: RealmNode>;
topAreaChildren: RealmNode[]>;
addTopAreaChild: RealmNode>;
nestedEditorChildren: RealmNode[]>;
addNestedEditorChild: RealmNode>;
editorWrappers: RealmNode[]>;
addEditorWrapper: RealmNode>;
currentFormat: RealmNode;
editorInFocus: RealmNode;
applyFormat: RealmNode;
currentBlockType: RealmNode;
applyBlockType: RealmNode;
convertSelectionToNode: RealmNode<() => ElementNode>;
insertDecoratorNode: RealmNode<() => DecoratorNode>;
onBlur: RealmNode;
iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
markdownProcessingError: RealmNode<{
error: string;
source: string;
} | null>;
markdownErrorSignal: RealmNode<{
error: string;
source: string;
}>;
}>], (r: Realm, [{ rootEditor }]: [{
activeEditor: RealmNode;
inFocus: RealmNode;
historyState: RealmNode;
currentSelection: RealmNode;
jsxIsAvailable: RealmNode;
jsxComponentDescriptors: RealmNode;
initialRootEditorState: RealmNode;
rootEditor: RealmNode;
createRootEditorSubscription: RealmNode;
createActiveEditorSubscription: RealmNode;
importVisitors: RealmNode[]>;
syntaxExtensions: RealmNode;
mdastExtensions: RealmNode<(Partial | Partial[])[] | null | undefined>;
usedLexicalNodes: RealmNode[]>;
addImportVisitor: RealmNode>;
addLexicalNode: RealmNode>;
addSyntaxExtension: RealmNode;
addMdastExtension: RealmNode | Partial[]>;
toMarkdownExtensions: RealmNode;
toMarkdownOptions: RealmNode;
addToMarkdownExtension: RealmNode;
addExportVisitor: RealmNode;
exportVisitors: RealmNode;
initialMarkdown: RealmNode;
setMarkdown: RealmNode;
markdown: RealmNode;
markdownSignal: RealmNode;
editorRootElementRef: RealmNode | null>;
contentEditableClassName: RealmNode;
placeholder: RealmNode;
autoFocus: RealmNode;
readOnly: RealmNode;
composerChildren: RealmNode[]>;
addComposerChild: RealmNode>;
topAreaChildren: RealmNode[]>;
addTopAreaChild: RealmNode>;
nestedEditorChildren: RealmNode[]>;
addNestedEditorChild: RealmNode>;
editorWrappers: RealmNode[]>;
addEditorWrapper: RealmNode>;
currentFormat: RealmNode;
editorInFocus: RealmNode;
applyFormat: RealmNode;
currentBlockType: RealmNode;
applyBlockType: RealmNode;
convertSelectionToNode: RealmNode<() => ElementNode>;
insertDecoratorNode: RealmNode<() => DecoratorNode>;
onBlur: RealmNode;
iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
markdownProcessingError: RealmNode<{
error: string;
source: string;
} | null>;
markdownErrorSignal: RealmNode<{
error: string;
source: string;
}>;
}]) => {
imageDialogState: RealmNode;
saveImage: RealmNode;
openNewImageDialog: RealmNode;
openEditImageDialog: RealmNode>;
closeImageDialog: RealmNode;
imageUploadHandler: RealmNode;
imageAutocompleteSuggestions: RealmNode;
disableImageResize: RealmNode;
insertImage: RealmNode;
imagePreviewHandler: RealmNode;
}>, ImagePluginParams>,
/** @internal */
imagePluginHooks: {
useRealmContext: () => TypedRealm<{
imageDialogState: RealmNode;
saveImage: RealmNode;
openNewImageDialog: RealmNode;
openEditImageDialog: RealmNode>;
closeImageDialog: RealmNode;
imageUploadHandler: RealmNode;
imageAutocompleteSuggestions: RealmNode;
disableImageResize: RealmNode;
insertImage: RealmNode;
imagePreviewHandler: RealmNode;
} & {
activeEditor: RealmNode;
inFocus: RealmNode;
historyState: RealmNode;
currentSelection: RealmNode;
jsxIsAvailable: RealmNode;
jsxComponentDescriptors: RealmNode;
initialRootEditorState: RealmNode;
rootEditor: RealmNode;
createRootEditorSubscription: RealmNode;
createActiveEditorSubscription: RealmNode;
importVisitors: RealmNode[]>;
syntaxExtensions: RealmNode;
mdastExtensions: RealmNode<(Partial | Partial[])[] | null | undefined>;
usedLexicalNodes: RealmNode[]>;
addImportVisitor: RealmNode>;
addLexicalNode: RealmNode>;
addSyntaxExtension: RealmNode;
addMdastExtension: RealmNode | Partial[]>;
toMarkdownExtensions: RealmNode;
toMarkdownOptions: RealmNode;
addToMarkdownExtension: RealmNode;
addExportVisitor: RealmNode;
exportVisitors: RealmNode