{"version":3,"sources":["../../src/react/slate-react.ts","../../src/react/components/DefaultLeaf.tsx","../../src/lib/editor/withSlate.ts","../../src/internal/utils/isFunction.ts","../../src/internal/utils/mergePlugins.ts","../../src/lib/plugin/createSlatePlugin.ts","../../src/lib/plugin/getEditorPlugin.ts","../../src/internal/plugin/resolvePlugin.ts","../../src/lib/plugin/getSlatePlugin.ts","../../src/internal/plugin/pipeNormalizeInitialValue.ts","../../src/internal/plugin/resolvePlugins.ts","../../src/lib/plugins/AstPlugin.ts","../../src/lib/plugins/DOMPlugin.ts","../../src/lib/plugins/HistoryPlugin.ts","../../src/lib/plugins/InlineVoidPlugin.ts","../../src/internal/plugin/pipeInsertFragment.ts","../../src/internal/plugin/pipeTransformData.ts","../../src/internal/plugin/pipeTransformFragment.ts","../../src/lib/utils/applyDeepToNodes.ts","../../src/lib/utils/getInjectMatch.ts","../../src/lib/utils/getKeysByTypes.ts","../../src/lib/utils/getInjectedPlugins.ts","../../src/lib/utils/getPluginNodeProps.ts","../../src/lib/static/utils/getNodeDataAttributes.ts","../../src/internal/plugin/pipeInjectNodeProps.tsx","../../src/internal/plugin/pluginInjectNodeProps.ts","../../src/lib/static/utils/pipeDecorate.ts","../../src/lib/static/deserialize/checkUtils.ts","../../src/lib/utils/getSlateClass.ts","../../src/lib/utils/mergeDeepToNodes.ts","../../src/lib/utils/normalizeDescendantsToDocumentFragment.ts","../../src/lib/plugins/debug/DebugPlugin.ts","../../src/lib/plugins/html/HtmlPlugin.ts","../../src/lib/plugins/html/utils/isHtmlElement.ts","../../src/lib/plugins/html/utils/isHtmlText.ts","../../src/lib/plugins/html/utils/inlineTagNames.ts","../../src/lib/plugins/html/utils/isHtmlInlineElement.ts","../../src/lib/plugins/html/utils/isHtmlBlockElement.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseString.ts","../../src/lib/plugins/html/utils/collapse-white-space/isLastNonEmptyTextOfInlineFormattingContext.ts","../../src/lib/plugins/html/utils/collapse-white-space/stateTransforms.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseWhiteSpaceText.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseWhiteSpaceNode.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseWhiteSpaceChildren.ts","../../src/lib/plugins/html/utils/collapse-white-space/inferWhiteSpaceRule.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseWhiteSpaceElement.ts","../../src/lib/plugins/html/utils/collapse-white-space/collapseWhiteSpace.ts","../../src/lib/plugins/html/utils/htmlBodyToFragment.ts","../../src/lib/plugins/html/utils/deserializeHtmlNodeChildren.ts","../../src/lib/plugins/html/utils/htmlBrToNewLine.ts","../../src/lib/plugins/html/utils/htmlElementToElement.ts","../../src/lib/plugins/html/utils/pluginDeserializeHtml.ts","../../src/lib/plugins/html/utils/getDataNodeProps.ts","../../src/lib/plugins/html/utils/pipeDeserializeHtmlElement.ts","../../src/lib/plugins/html/utils/htmlElementToLeaf.ts","../../src/lib/plugins/html/utils/pipeDeserializeHtmlLeaf.ts","../../src/lib/plugins/html/utils/htmlTextNodeToString.ts","../../src/lib/plugins/html/utils/deserializeHtmlNode.ts","../../src/lib/plugins/html/utils/deserializeHtmlElement.ts","../../src/lib/plugins/html/utils/htmlStringToDOMNode.ts","../../src/lib/plugins/html/utils/deserializeHtml.ts","../../src/lib/plugins/html/utils/parseHtmlDocument.ts","../../src/lib/plugins/length/LengthPlugin.ts","../../src/lib/plugins/paragraph/BaseParagraphPlugin.ts","../../src/lib/plugins/slate-extension/SlateExtensionPlugin.ts","../../src/lib/utils/pipeInsertDataQuery.ts","../../src/lib/plugins/ParserPlugin.ts","../../src/lib/plugins/getCorePlugins.ts","../../src/lib/libs/zustand.ts","../../src/react/plugin/toPlatePlugin.ts","../../src/react/plugin/createPlatePlugin.ts","../../src/react/plugin/getEditorPlugin.ts","../../src/react/plugin/getPlugin.ts","../../src/react/plugin/omitPluginContext.ts","../../src/react/components/EditorHotkeysEffect.tsx","../../src/react/stores/element/useElement.ts","../../src/react/stores/plate/createPlateStore.ts","../../src/react/libs/jotai.ts","../../src/react/editor/withPlate.ts","../../src/react/plugins/SlateReactExtensionPlugin.ts","../../src/react/plugins/event-editor/EventEditorStore.ts","../../src/react/plugins/event-editor/useFocusEditorEvents.ts","../../src/react/plugins/event-editor/EventEditorPlugin.ts","../../src/react/plugins/event-editor/getEventPlateId.ts","../../src/react/plugins/paragraph/ParagraphPlugin.tsx","../../src/react/plugins/react/withPlateReact.ts","../../src/react/plugins/react/ReactPlugin.ts","../../src/react/editor/getPlateCorePlugins.ts","../../src/react/utils/createPlateFallbackEditor.ts","../../src/react/utils/dom-attributes.ts","../../src/react/utils/getRenderNodeProps.ts","../../src/react/utils/pipeHandler.ts","../../src/react/utils/pipeOnChange.ts","../../src/react/utils/pipeRenderElement.tsx","../../src/react/hooks/useEditableProps.ts","../../src/react/utils/pipeRenderLeaf.tsx","../../src/react/utils/pluginRenderLeaf.tsx","../../src/react/hooks/useNodePath.ts","../../src/react/hooks/useSlateProps.ts","../../src/react/utils/pluginRenderElement.tsx","../../src/react/stores/element/useElementStore.ts","../../src/react/stores/plate-controller/plateControllerStore.ts","../../src/react/stores/plate/useEditorPlugin.ts","../../src/react/stores/plate/useEditorSelector.ts","../../src/react/stores/plate/usePluginOption.ts","../../src/react/stores/element/useElementSelector.ts","../../src/react/stores/element/usePath.ts","../../src/react/stores/event-editor/useEventPlateId.ts","../../src/react/components/EditorMethodsEffect.ts","../../src/react/components/EditorRefEffect.tsx","../../src/react/components/EditorStateEffect.tsx","../../src/react/components/Plate.tsx","../../src/internal/hooks/usePlateInstancesWarn.ts","../../src/react/components/PlateContent.tsx","../../src/react/components/PlateControllerEffect.ts","../../src/react/components/PlateSlate.tsx","../../src/react/components/PlateTest.tsx","../../src/react/editor/usePlateEditor.ts","../../src/react/components/withHOC.tsx"],"sourcesContent":["// Components\nexport {\n  type RenderPlaceholderProps,\n  DefaultElement,\n  DefaultPlaceholder,\n  Editable,\n  Slate,\n} from 'slate-react';\n\n// Hooks\nexport {\n  useComposing,\n  useFocused,\n  useReadOnly,\n  useSelected,\n} from 'slate-react';\n\n// Plugin\nexport { withReact } from 'slate-react';\n","import React from 'react';\n\nimport type { TText } from '@udecode/slate';\n\nimport { clsx } from 'clsx';\n\nimport { type PlateRenderLeafProps, omitPluginContext } from '../plugin';\n\ntype DefaultLeafProps = {\n  leafToAttributes?: (leaf: TText) => any;\n} & PlateRenderLeafProps &\n  React.HTMLAttributes<HTMLSpanElement>;\n\nconst useDefaultLeaf = (props: DefaultLeafProps) => {\n  const { attributes, leaf, leafToAttributes, nodeProps, text, ...rootProps } =\n    omitPluginContext(props as any);\n\n  return {\n    props: {\n      ...attributes,\n      ...rootProps,\n      ...nodeProps,\n      ...leafToAttributes?.(leaf),\n      className: clsx(props.className, nodeProps?.className),\n    },\n  };\n};\n\nexport function DefaultLeaf(props: DefaultLeafProps) {\n  const { props: rootProps } = useDefaultLeaf(props);\n\n  return <span {...rootProps} />;\n}\n","import {\n  type Editor,\n  type TSelection,\n  type Value,\n  createEditor,\n} from '@udecode/slate';\nimport { nanoid } from 'nanoid';\n\nimport type { AnyPluginConfig } from '../plugin/BasePlugin';\nimport type { AnySlatePlugin } from '../plugin/SlatePlugin';\nimport type { InferPlugins, SlateEditor, TSlateEditor } from './SlateEditor';\n\nimport { pipeNormalizeInitialValue } from '../../internal/plugin/pipeNormalizeInitialValue';\nimport { resolvePlugins } from '../../internal/plugin/resolvePlugins';\nimport { createSlatePlugin } from '../plugin/createSlatePlugin';\nimport { getPluginType, getSlatePlugin } from '../plugin/getSlatePlugin';\nimport { type CorePlugin, getCorePlugins } from '../plugins/getCorePlugins';\n\nexport type BaseWithSlateOptions<P extends AnyPluginConfig = CorePlugin> = {\n  id?: string;\n  /**\n   * Select the editor after initialization.\n   *\n   * @default false\n   *\n   * - `true` | 'end': Select the end of the editor\n   * - `false`: Do not select anything\n   * - `'start'`: Select the start of the editor\n   */\n  autoSelect?: boolean | 'end' | 'start';\n  /** Specifies the maximum number of characters allowed in the editor. */\n  maxLength?: number;\n  plugins?: P[];\n  selection?: TSelection;\n  /**\n   * When `true`, it will normalize the initial `value` passed to the `editor`.\n   * This is useful when adding normalization rules on already existing\n   * content.\n   *\n   * @default false\n   */\n  shouldNormalizeEditor?: boolean;\n};\n\nexport type WithSlateOptions<\n  V extends Value = Value,\n  P extends AnyPluginConfig = CorePlugin,\n> = BaseWithSlateOptions<P> &\n  Pick<\n    Partial<AnySlatePlugin>,\n    | 'api'\n    | 'decorate'\n    | 'extendEditor'\n    | 'inject'\n    | 'normalizeInitialValue'\n    | 'options'\n    | 'override'\n    | 'transforms'\n  > & {\n    value?: ((editor: SlateEditor) => V) | V | string;\n    /** Function to configure the root plugin */\n    rootPlugin?: (plugin: AnySlatePlugin) => AnySlatePlugin;\n  };\n\n/**\n * Applies Plate enhancements to an editor instance (non-React version).\n *\n * @remarks\n *   This function supports server-side usage as it doesn't include the\n *   ReactPlugin.\n * @see {@link createSlateEditor} for a higher-level non-React editor creation function.\n * @see {@link createPlateEditor} for a higher-level React editor creation function.\n * @see {@link usePlateEditor} for a React memoized version.\n * @see {@link withPlate} for the React-specific enhancement function.\n */\nexport const withSlate = <\n  V extends Value = Value,\n  P extends AnyPluginConfig = CorePlugin,\n>(\n  e: Editor,\n  {\n    id,\n    autoSelect,\n    maxLength,\n    plugins = [],\n    rootPlugin,\n    selection,\n    shouldNormalizeEditor,\n    value,\n    ...pluginConfig\n  }: WithSlateOptions<V, P> = {}\n): TSlateEditor<V, InferPlugins<P[]>> => {\n  const editor = e as SlateEditor;\n\n  editor.id = id ?? editor.id ?? nanoid();\n  editor.key = editor.key ?? nanoid();\n  editor.isFallback = false;\n  editor.prevSelection = null;\n  editor.currentKeyboardEvent = null;\n\n  editor.getApi = () => editor.api as any;\n  editor.getTransforms = () => editor.transforms as any;\n  editor.getPlugin = (plugin) => getSlatePlugin(editor, plugin) as any;\n  editor.getType = (plugin) => getPluginType(editor, plugin);\n  editor.getInjectProps = (plugin) => {\n    return (\n      editor.getPlugin<AnySlatePlugin>(plugin).inject?.nodeProps ?? ({} as any)\n    );\n  };\n  editor.getOptionsStore = (plugin) => {\n    return editor.getPlugin(plugin).optionsStore;\n  };\n  editor.getOptions = (plugin) => {\n    const store = editor.getOptionsStore(plugin);\n\n    if (!store) return editor.getPlugin(plugin).options;\n\n    return editor.getOptionsStore(plugin).get('state');\n  };\n  editor.getOption = (plugin, key, ...args) => {\n    const store = editor.getOptionsStore(plugin);\n\n    if (!store) return editor.getPlugin(plugin).options[key];\n\n    if (!(key in store.get('state')) && !(key in store.selectors)) {\n      editor.api.debug.error(\n        `editor.getOption: ${key as string} option is not defined in plugin ${plugin.key}.`,\n        'OPTION_UNDEFINED'\n      );\n      return;\n    }\n\n    return (store.get as any)(key, ...args);\n  };\n  editor.setOption = (plugin: any, key: any, ...args: any) => {\n    const store = editor.getOptionsStore(plugin);\n\n    if (!store) return;\n\n    if (!(key in store.get('state'))) {\n      editor.api.debug.error(\n        `editor.setOption: ${key} option is not defined in plugin ${plugin.key}.`,\n        'OPTION_UNDEFINED'\n      );\n      return;\n    }\n\n    (store.set as any)(key, ...args);\n  };\n  editor.setOptions = (plugin: any, options: any) => {\n    const store = editor.getOptionsStore(plugin);\n\n    if (!store) return;\n    if (typeof options === 'object') {\n      store.set('state', (draft: any) => {\n        Object.assign(draft, options);\n      });\n    } else if (typeof options === 'function') {\n      store.set('state', options);\n    }\n  };\n\n  // Plugin initialization code\n  const corePlugins = getCorePlugins({\n    maxLength,\n    plugins,\n  });\n\n  let rootPluginInstance = createSlatePlugin({\n    key: 'root',\n    priority: 10_000,\n    ...pluginConfig,\n    plugins: [...corePlugins, ...plugins],\n  });\n\n  // Apply rootPlugin configuration if provided\n  if (rootPlugin) {\n    rootPluginInstance = rootPlugin(rootPluginInstance) as any;\n  }\n\n  resolvePlugins(editor, [rootPluginInstance]);\n\n  if (typeof value === 'string') {\n    editor.children = editor.api.html.deserialize({ element: value }) as Value;\n  } else if (typeof value === 'function') {\n    editor.children = value(editor);\n  } else if (value) {\n    editor.children = value;\n  }\n  if (!editor.children || editor.children?.length === 0) {\n    editor.children = editor.api.create.value();\n  }\n  if (selection) {\n    editor.selection = selection;\n  } else if (autoSelect) {\n    const edge = autoSelect === 'start' ? 'start' : 'end';\n    const target = edge === 'start' ? editor.api.start([]) : editor.api.end([]);\n    editor.tf.select(target!);\n  }\n  if (editor.children.length > 0) {\n    pipeNormalizeInitialValue(editor);\n  }\n  if (shouldNormalizeEditor) {\n    editor.tf.normalize({ force: true });\n  }\n\n  return editor as any;\n};\n\nexport type CreateSlateEditorOptions<\n  V extends Value = Value,\n  P extends AnyPluginConfig = CorePlugin,\n> = WithSlateOptions<V, P> & {\n  /**\n   * Initial editor to be extended with `withPlate`.\n   *\n   * @default createEditor()\n   */\n  editor?: Editor;\n};\n\n/**\n * Creates a Slate editor without React-specific enhancements.\n *\n * @see {@link createPlateEditor} for a React-specific version of editor creation.\n * @see {@link usePlateEditor} for a memoized React version.\n * @see {@link withSlate} for the underlying function that applies Slate enhancements to an editor.\n */\nexport const createSlateEditor = <\n  V extends Value = Value,\n  P extends AnyPluginConfig = CorePlugin,\n>({\n  editor = createEditor(),\n  ...options\n}: CreateSlateEditorOptions<V, P> = {}) => {\n  return withSlate<V, P>(editor, options);\n};\n","export function isFunction(value: any): value is Function {\n  return typeof value === 'function';\n}\n","import mergeWith from 'lodash/mergeWith.js';\n\nimport type { SlatePlugin } from '../../lib';\n\nexport function mergePlugins<T>(basePlugin: T, ...sourcePlugins: any[]): T {\n  return mergeWith(\n    {},\n    basePlugin,\n    ...sourcePlugins,\n    (objValue: unknown, srcValue: unknown, key: keyof SlatePlugin) => {\n      // Overwrite array (including plugins) without cloning\n      if (Array.isArray(srcValue)) {\n        return srcValue;\n      }\n      // Shallow merge options\n      if (key === 'options') {\n        return { ...(objValue as any), ...(srcValue as any) };\n      }\n    }\n  );\n}\n","import type { Modify } from '@udecode/utils';\n\nimport type { SlateEditor } from '../editor/SlateEditor';\nimport type { AnyPluginConfig, PluginConfig } from './BasePlugin';\nimport type {\n  SlatePlugin,\n  SlatePluginMethods,\n  SlatePlugins,\n} from './SlatePlugin';\n\nimport { isFunction } from '../../internal/utils/isFunction';\nimport { mergePlugins } from '../../internal/utils/mergePlugins';\n\ntype SlatePluginConfig<\n  K extends string = any,\n  O = {},\n  A = {},\n  T = {},\n  S = {},\n> = Omit<\n  Partial<\n    Modify<\n      SlatePlugin<PluginConfig<K, O, A, T, S>>,\n      {\n        node?: Partial<SlatePlugin<PluginConfig<K, O, A, T, S>>['node']>;\n      }\n    >\n  >,\n  keyof SlatePluginMethods | 'optionsStore'\n>;\n\ntype TSlatePluginConfig<C extends AnyPluginConfig = PluginConfig> = Omit<\n  Partial<\n    Modify<\n      SlatePlugin<C>,\n      {\n        node?: Partial<SlatePlugin<C>['node']>;\n      }\n    >\n  >,\n  keyof SlatePluginMethods | 'optionsStore'\n>;\n\n/**\n * Creates a new Plate plugin with the given configuration.\n *\n * @remarks\n *   - The plugin's key is required and specified by the K generic.\n *   - The `__extensions` array stores functions to be applied when `resolvePlugin`\n *       is called with an editor.\n *   - The `extend` method adds new extensions to be applied later.\n *   - The `extendPlugin` method extends an existing plugin (including nested\n *       plugins) or adds a new one if not found.\n *\n * @example\n *   const myPlugin = createSlatePlugin<\n *     'myPlugin',\n *     MyOptions,\n *     MyApi,\n *     MyTransforms\n *   >({\n *     key: 'myPlugin',\n *     options: { someOption: true },\n *     transforms: { someTransform: () => {} },\n *   });\n *\n *   const extendedPlugin = myPlugin.extend({\n *     options: { anotherOption: false },\n *   });\n *\n *   const pluginWithNestedExtension = extendedPlugin.extendPlugin(\n *     nestedPlugin,\n *     {\n *       options: { nestedOption: true },\n *     }\n *   );\n *\n * @template K - The literal type of the plugin key.\n * @template O - The type of the plugin options.\n * @template A - The type of the plugin utilities.\n * @template T - The type of the plugin transforms.\n * @template S - The type of the plugin storage.\n * @param {Partial<SlatePlugin<K, O, A, T, S>>} config - The configuration\n *   object for the plugin.\n * @returns {SlatePlugin<K, O, A, T, S>} A new Plate plugin instance with the\n *   following properties and methods:\n *\n *   - All properties from the input config, merged with default values.\n *   - `configure`: A method to create a new plugin instance with updated options.\n *   - `extend`: A method to create a new plugin instance with additional\n *       configuration.\n *   - `extendPlugin`: A method to extend an existing plugin (including nested\n *       plugins) or add a new one if not found.\n */\nexport function createSlatePlugin<\n  K extends string = any,\n  O = {},\n  A = {},\n  T = {},\n  S = {},\n>(\n  config:\n    | ((editor: SlateEditor) => SlatePluginConfig<K, O, A, T, S>)\n    | SlatePluginConfig<K, O, A, T, S> = {}\n): SlatePlugin<PluginConfig<K, O, A, T, S>> {\n  let baseConfig: Partial<SlatePlugin<PluginConfig<K, O, A, T, S>>>;\n  let initialExtension: any;\n\n  if (isFunction(config)) {\n    baseConfig = { key: '' as K };\n    initialExtension = (editor: any) => config(editor);\n  } else {\n    baseConfig = config as any;\n  }\n\n  const key = baseConfig.key ?? '';\n\n  const plugin = mergePlugins(\n    {\n      key,\n      __apiExtensions: [],\n      __configuration: null,\n      __extensions: initialExtension ? [initialExtension] : [],\n      __selectorExtensions: [],\n      api: {},\n      dependencies: [],\n      editor: {},\n      handlers: {},\n      inject: {},\n      node: { type: key },\n      options: {},\n      override: {},\n      parser: {},\n      parsers: {},\n      plugins: [],\n      priority: 100,\n      render: {},\n      shortcuts: {},\n      transforms: {},\n    },\n    config\n  ) as unknown as SlatePlugin<PluginConfig<K, O, A, T, S>>;\n\n  plugin.configure = (config) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__configuration = (ctx) =>\n      isFunction(config) ? config(ctx as any) : config;\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.configurePlugin = (p, config) => {\n    const newPlugin = { ...plugin };\n\n    const configureNestedPlugin = (\n      plugins: SlatePlugins\n    ): { found: boolean; plugins: SlatePlugins } => {\n      let found = false;\n\n      const updatedPlugins = plugins.map((nestedPlugin) => {\n        if (nestedPlugin.key === p.key) {\n          found = true;\n\n          return createSlatePlugin({\n            ...nestedPlugin,\n            __configuration: (ctx: any) =>\n              isFunction(config) ? config(ctx) : config,\n          } as any);\n        }\n        if (nestedPlugin.plugins && nestedPlugin.plugins.length > 0) {\n          const result = configureNestedPlugin(nestedPlugin.plugins);\n\n          if (result.found) {\n            found = true;\n\n            return {\n              ...nestedPlugin,\n              plugins: result.plugins,\n            };\n          }\n        }\n\n        return nestedPlugin;\n      });\n\n      return { found, plugins: updatedPlugins };\n    };\n\n    const result = configureNestedPlugin(newPlugin.plugins as any);\n    newPlugin.plugins = result.plugins as any;\n\n    // We're not adding a new plugin if not found\n\n    return createSlatePlugin(newPlugin);\n  };\n\n  plugin.extendEditorApi = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__apiExtensions = [\n      ...(newPlugin.__apiExtensions as any),\n      { extension, isPluginSpecific: false },\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.extendSelectors = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__selectorExtensions = [\n      ...(newPlugin.__selectorExtensions as any),\n      extension,\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.extendApi = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__apiExtensions = [\n      ...(newPlugin.__apiExtensions as any),\n      { extension, isPluginSpecific: true },\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.extendEditorTransforms = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__apiExtensions = [\n      ...(newPlugin.__apiExtensions as any),\n      { extension, isPluginSpecific: false, isTransform: true },\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.extendTransforms = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__apiExtensions = [\n      ...(newPlugin.__apiExtensions as any),\n      { extension, isPluginSpecific: true, isTransform: true },\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.overrideEditor = (extension) => {\n    const newPlugin = { ...plugin };\n    newPlugin.__apiExtensions = [\n      ...(newPlugin.__apiExtensions as any),\n      {\n        extension,\n        isOverride: true,\n        isPluginSpecific: false,\n        isTransform: true,\n      },\n    ];\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.extend = (extendConfig) => {\n    let newPlugin = { ...plugin };\n\n    if (isFunction(extendConfig)) {\n      newPlugin.__extensions = [\n        ...(newPlugin.__extensions as any),\n        extendConfig,\n      ];\n    } else {\n      newPlugin = mergePlugins(newPlugin, extendConfig as any);\n    }\n\n    return createSlatePlugin(newPlugin) as any;\n  };\n\n  plugin.clone = () => mergePlugins(plugin);\n\n  plugin.extendPlugin = (p, extendConfig) => {\n    const newPlugin = { ...plugin };\n\n    const extendNestedPlugin = (\n      plugins: SlatePlugins\n    ): { found: boolean; plugins: SlatePlugins } => {\n      let found = false;\n      const updatedPlugins = plugins.map((nestedPlugin) => {\n        if (nestedPlugin.key === p.key) {\n          found = true;\n\n          return createSlatePlugin({\n            ...nestedPlugin,\n            __extensions: [\n              ...(nestedPlugin.__extensions as any),\n              (ctx: any) =>\n                isFunction(extendConfig) ? extendConfig(ctx) : extendConfig,\n            ],\n          } as any);\n        }\n        if (nestedPlugin.plugins && nestedPlugin.plugins.length > 0) {\n          const result = extendNestedPlugin(nestedPlugin.plugins);\n\n          if (result.found) {\n            found = true;\n\n            return {\n              ...nestedPlugin,\n              plugins: result.plugins,\n            };\n          }\n        }\n\n        return nestedPlugin;\n      });\n\n      return { found, plugins: updatedPlugins };\n    };\n\n    const result = extendNestedPlugin(newPlugin.plugins as any);\n    newPlugin.plugins = result.plugins as any;\n\n    // If the plugin wasn't found at any level, add it at the top level\n    if (!result.found) {\n      newPlugin.plugins.push(\n        createSlatePlugin({\n          key: p.key,\n          __extensions: [\n            (ctx: any) =>\n              isFunction(extendConfig)\n                ? extendConfig(ctx as any)\n                : (extendConfig as any),\n          ],\n        } as any)\n      );\n    }\n\n    return createSlatePlugin(newPlugin);\n  };\n\n  return plugin;\n}\n\n/**\n * Explicitly typed version of `createSlatePlugin`.\n *\n * @remarks\n *   While `createSlatePlugin` uses type inference, this function requires an\n *   explicit type parameter. Use this when you need precise control over the\n *   plugin's type structure or when type inference doesn't provide the desired\n *   result.\n */\nexport function createTSlatePlugin<C extends AnyPluginConfig = PluginConfig>(\n  config:\n    | ((editor: SlateEditor) => TSlatePluginConfig<C>)\n    | TSlatePluginConfig<C> = {}\n): SlatePlugin<C> {\n  return createSlatePlugin(config as any) as any;\n}\n","import type { SlateEditor } from '../editor';\nimport type { AnyPluginConfig, WithRequiredKey } from './BasePlugin';\nimport type {\n  InferConfig,\n  SlatePlugin,\n  SlatePluginContext,\n} from './SlatePlugin';\n\nexport function getEditorPlugin<\n  P extends AnyPluginConfig | SlatePlugin<AnyPluginConfig>,\n>(\n  editor: SlateEditor,\n  p: WithRequiredKey<P>\n): SlatePluginContext<InferConfig<P> extends never ? P : InferConfig<P>> {\n  const plugin = editor.getPlugin(p) as any;\n\n  return {\n    api: editor.api,\n    editor,\n    plugin: plugin as any,\n    setOption: ((keyOrOptions: any, value: any) =>\n      editor.setOption(plugin, keyOrOptions, value)) as any,\n    setOptions: ((options: any) => editor.setOptions(plugin, options)) as any,\n    tf: editor.transforms,\n    type: plugin.node.type,\n    getOption: (key: any, ...args: any) =>\n      (editor.getOption as any)(plugin, key, ...args),\n    getOptions: () => editor.getOptions(plugin),\n  };\n}\n","import merge from 'lodash/merge.js';\n\nimport type { SlateEditor } from '../../lib/editor';\nimport type { PluginConfig } from '../../lib/plugin/BasePlugin';\nimport type { AnySlatePlugin, SlatePlugin } from '../../lib/plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../../lib/plugin/getEditorPlugin';\nimport { mergePlugins } from '../utils/mergePlugins';\n\n/**\n * Resolves and finalizes a plugin configuration for use in a Plate editor.\n *\n * This function processes a given plugin configuration, applying any extensions\n * and resolving nested plugins. It prepares the plugin for integration into the\n * Plate editor system by:\n *\n * 1. Cloning the plugin to avoid mutating the original\n * 2. Applying all stored extensions to the plugin\n * 3. Clearing the extensions array after application\n *\n * @example\n *   const plugin = createSlatePlugin({ key: 'myPlugin', ...otherOptions }).extend(...);\n *   const resolvedPlugin = resolvePlugin(editor, plugin);\n */\nexport const resolvePlugin = <P extends AnySlatePlugin>(\n  editor: SlateEditor,\n  _plugin: P\n): P => {\n  // Create a deep clone of the plugin\n  let plugin = mergePlugins({}, _plugin) as P;\n\n  plugin.__resolved = true;\n\n  // Apply the stored configuration first\n  if (plugin.__configuration) {\n    const configResult = plugin.__configuration(\n      getEditorPlugin(editor, plugin as any)\n    );\n\n    plugin = mergePlugins(plugin, configResult);\n\n    delete (plugin as any).__configuration;\n  }\n  // Apply all stored extensions\n  if (plugin.__extensions && plugin.__extensions.length > 0) {\n    plugin.__extensions.forEach((extension) => {\n      plugin = mergePlugins(\n        plugin,\n        extension(getEditorPlugin(editor, plugin as any))\n      );\n    });\n    plugin.__extensions = [];\n  }\n\n  const targetPluginToInject = plugin.inject?.targetPluginToInject;\n  const targetPlugins = plugin.inject?.targetPlugins;\n\n  if (targetPluginToInject && targetPlugins && targetPlugins.length > 0) {\n    plugin.inject = plugin.inject || {};\n    plugin.inject.plugins = merge(\n      {},\n      plugin.inject.plugins,\n      Object.fromEntries(\n        targetPlugins.map((targetPlugin) => {\n          const injectedPlugin = targetPluginToInject({\n            ...getEditorPlugin(editor, plugin as any),\n            targetPlugin,\n          });\n\n          return [targetPlugin, injectedPlugin];\n        })\n      )\n    );\n  }\n  // TODO React\n  if ((plugin as any).node?.component) {\n    (plugin as any).render.node = (plugin as any).node.component;\n  }\n  if ((plugin as any).render?.node) {\n    (plugin as any).node.component = (plugin as any).render.node;\n  }\n\n  validatePlugin(editor, plugin);\n\n  return plugin;\n};\n\nexport const validatePlugin = <\n  K extends string = any,\n  O = {},\n  A = {},\n  T = {},\n  S = {},\n>(\n  editor: SlateEditor,\n  plugin: SlatePlugin<PluginConfig<K, O, A, T, S>>\n) => {\n  if (!plugin.__extensions) {\n    editor.api.debug.error(\n      `Invalid plugin '${plugin.key}', you should use createSlatePlugin.`,\n      'USE_CREATE_PLUGIN'\n    );\n  }\n  if (plugin.node.isElement && plugin.node.isLeaf) {\n    editor.api.debug.error(\n      `Plugin ${plugin.key} cannot be both an element and a leaf.`,\n      'PLUGIN_NODE_TYPE'\n    );\n  }\n};\n","import type { SlateEditor } from '../editor';\nimport type {\n  AnyPluginConfig,\n  PluginConfig,\n  WithRequiredKey,\n} from './BasePlugin';\nimport type { AnySlatePlugin, SlatePlugin } from './SlatePlugin';\n\nimport { resolvePlugin } from '../../internal/plugin/resolvePlugin';\nimport { createSlatePlugin } from './createSlatePlugin';\n\n/** Get editor plugin by key or plugin object. */\nexport function getSlatePlugin<C extends AnyPluginConfig = PluginConfig>(\n  editor: SlateEditor,\n  p: WithRequiredKey<C>\n): C extends { node: any } ? C : SlatePlugin<C> {\n  let plugin = p as any;\n\n  const editorPlugin = editor.plugins[p.key] as any;\n\n  if (!editorPlugin) {\n    // When passing only { key }\n    if (!plugin.node) {\n      plugin = createSlatePlugin(plugin);\n    }\n\n    // Resolve is need when passing an external plugin with extensions (e.g. in withLink)\n    return plugin.__resolved ? plugin : resolvePlugin(editor, plugin);\n  }\n\n  return editorPlugin;\n}\n\n/** Get editor plugin type by key or plugin object. */\nexport function getPluginType(\n  editor: SlateEditor,\n  plugin: WithRequiredKey\n): string {\n  const p = editor.getPlugin<AnySlatePlugin>(plugin);\n\n  return p.node.type ?? p.key ?? '';\n}\n\n/** Get editor plugin types by key. */\nexport const getPluginTypes = (\n  editor: SlateEditor,\n  plugins: WithRequiredKey[]\n) => plugins.map((plugin) => editor.getType(plugin));\n","import type { SlateEditor } from '../../lib/editor';\n\nimport { getEditorPlugin } from '../../lib/plugin';\n\n/** Normalize initial value from editor plugins. Set into plate store if diff. */\nexport const pipeNormalizeInitialValue = (editor: SlateEditor) => {\n  editor.pluginList.forEach((p) => {\n    p.normalizeInitialValue?.({\n      ...getEditorPlugin(editor, p),\n      value: editor.children,\n    } as any);\n  });\n};\n","import {\n  assignLegacyApi,\n  assignLegacyTransforms,\n  syncLegacyMethods,\n} from '@udecode/slate';\nimport { isDefined } from '@udecode/utils';\nimport merge from 'lodash/merge.js';\nimport { createZustandStore } from 'zustand-x';\n\nimport type { SlateEditor } from '../../lib/editor';\n\nimport {\n  type SlatePlugin,\n  type SlatePlugins,\n  getEditorPlugin,\n} from '../../lib/plugin';\nimport { mergePlugins } from '../utils/mergePlugins';\nimport { resolvePlugin } from './resolvePlugin';\n\n/**\n * Initialize and configure the editor's plugin system. This function sets up\n * the editor's plugins, resolving core and custom plugins, and applying any\n * overrides specified in the plugins.\n */\nexport const resolvePlugins = (\n  editor: SlateEditor,\n  plugins: SlatePlugins = []\n) => {\n  editor.pluginList = [];\n  editor.plugins = {};\n  editor.shortcuts = {} as any;\n\n  const resolvedPlugins = resolveAndSortPlugins(editor, plugins);\n\n  applyPluginsToEditor(editor, resolvedPlugins);\n\n  resolvePluginOverrides(editor);\n\n  resolvePluginStores(editor);\n\n  // extendEditor\n  editor.pluginList.forEach((plugin) => {\n    if (plugin.extendEditor) {\n      editor = plugin.extendEditor(getEditorPlugin(editor, plugin) as any);\n\n      // Sync any editor methods that were modified by extendEditor\n      syncLegacyMethods(editor);\n    }\n\n    // Sync overridden plugin methods to legacy editor methods\n    resolvePluginMethods(editor, plugin);\n  });\n\n  resolvePluginShortcuts(editor);\n\n  return editor;\n};\n\nconst resolvePluginStores = (editor: SlateEditor) => {\n  // Create zustand stores for each plugin\n  editor.pluginList.forEach((plugin) => {\n    let store = createZustandStore(plugin.options, {\n      mutative: true,\n      name: plugin.key,\n    });\n\n    // Apply option extensions\n    if (\n      (plugin as any).__selectorExtensions &&\n      (plugin as any).__selectorExtensions.length > 0\n    ) {\n      (plugin as any).__selectorExtensions.forEach((extension: any) => {\n        const extendedOptions = extension(getEditorPlugin(editor, plugin));\n\n        store = store.extendSelectors(() => extendedOptions);\n      });\n    }\n\n    plugin.optionsStore = store;\n  });\n};\n\nconst resolvePluginMethods = (editor: SlateEditor, plugin: any) => {\n  // Merge APIs\n  Object.entries(plugin.api).forEach(([apiKey, apiFunction]) => {\n    (editor.api as any)[apiKey] = apiFunction;\n  });\n\n  // Apply API and transform extensions\n  if (plugin.__apiExtensions && plugin.__apiExtensions.length > 0) {\n    plugin.__apiExtensions.forEach(\n      ({ extension, isOverride, isPluginSpecific, isTransform }: any) => {\n        const newExtensions = extension(getEditorPlugin(editor, plugin) as any);\n\n        if (isOverride) {\n          // Handle combined API and transforms override\n          if (newExtensions.api) {\n            merge(editor.api, newExtensions.api);\n            merge(plugin.api, newExtensions.api);\n            assignLegacyApi(editor, editor.api);\n          }\n          if (newExtensions.transforms) {\n            merge(editor.transforms, newExtensions.transforms);\n            merge(plugin.transforms, newExtensions.transforms);\n            assignLegacyTransforms(editor, newExtensions.transforms);\n          }\n        } else if (isTransform) {\n          // Handle transforms\n          if (isPluginSpecific) {\n            // Plugin-specific transform\n            if (!(editor.transforms as any)[plugin.key]) {\n              (editor.transforms as any)[plugin.key] = {};\n            }\n            if (!(plugin.transforms as any)[plugin.key]) {\n              (plugin.transforms as any)[plugin.key] = {};\n            }\n\n            merge((editor.transforms as any)[plugin.key], newExtensions);\n            merge((plugin.transforms as any)[plugin.key], newExtensions);\n          } else {\n            // Editor-wide transform\n            merge(editor.transforms, newExtensions);\n            merge(plugin.transforms, newExtensions);\n            assignLegacyTransforms(editor, newExtensions);\n          }\n        } else {\n          // Handle APIs\n          if (isPluginSpecific) {\n            // Plugin-specific API\n            if (!(editor.api as any)[plugin.key]) {\n              (editor.api as any)[plugin.key] = {};\n            }\n            if (!(plugin.api as any)[plugin.key]) {\n              (plugin.api as any)[plugin.key] = {};\n            }\n\n            merge((editor.api as any)[plugin.key], newExtensions);\n            merge((plugin.api as any)[plugin.key], newExtensions);\n          } else {\n            // Editor-wide API\n            merge(editor.api, newExtensions);\n            merge(plugin.api, newExtensions);\n            assignLegacyApi(editor, editor.api);\n          }\n        }\n      }\n    );\n    delete plugin.__apiExtensions;\n  }\n};\n\nconst resolvePluginShortcuts = (editor: SlateEditor) => {\n  const shortcutsByPriority: any[] = [];\n\n  editor.pluginList.forEach((plugin) => {\n    // Merge shortcuts\n    Object.entries(plugin.shortcuts).forEach(([key, hotkey]) => {\n      if (hotkey === null) {\n        // Remove any existing hotkey with this key\n        const index = shortcutsByPriority.findIndex((item) => item.key === key);\n\n        if (index !== -1) {\n          shortcutsByPriority.splice(index, 1);\n        }\n      } else {\n        const priority = (hotkey as any).priority ?? plugin.priority;\n        const existingIndex = shortcutsByPriority.findIndex(\n          (item) => item.key === key\n        );\n\n        if (\n          existingIndex === -1 ||\n          priority >= shortcutsByPriority[existingIndex].priority\n        ) {\n          if (existingIndex !== -1) {\n            shortcutsByPriority.splice(existingIndex, 1);\n          }\n\n          shortcutsByPriority.push({ key, hotkey, priority });\n        }\n      }\n    });\n  });\n\n  // Sort shortcuts by priority (descending)\n  shortcutsByPriority.sort((a, b) => b.hotkey.priority - a.hotkey.priority);\n\n  // After processing all plugins, set the final shortcuts on the editor\n  editor.shortcuts = Object.fromEntries(\n    shortcutsByPriority.map(({ key, hotkey }) => {\n      const { priority, ...hotkeyWithoutPriority } = hotkey;\n\n      return [key, hotkeyWithoutPriority];\n    })\n  );\n};\n\nconst flattenAndResolvePlugins = (\n  editor: SlateEditor,\n  plugins: SlatePlugins\n): Map<string, SlatePlugin> => {\n  const pluginMap = new Map<string, SlatePlugin>();\n\n  const processPlugin = (plugin: SlatePlugin) => {\n    const resolvedPlugin = resolvePlugin(editor, plugin);\n    const existingPlugin = pluginMap.get(resolvedPlugin.key);\n\n    if (existingPlugin) {\n      pluginMap.set(\n        resolvedPlugin.key,\n        mergePlugins(existingPlugin, resolvedPlugin)\n      );\n    } else {\n      pluginMap.set(resolvedPlugin.key, resolvedPlugin);\n    }\n    if (resolvedPlugin.plugins && resolvedPlugin.plugins.length > 0) {\n      resolvedPlugin.plugins.forEach(processPlugin);\n    }\n  };\n\n  plugins.forEach(processPlugin);\n\n  return pluginMap;\n};\n\nexport const resolveAndSortPlugins = (\n  editor: SlateEditor,\n  plugins: SlatePlugins\n): SlatePlugins => {\n  // Step 1: Resolve, flatten, and merge all plugins\n  const pluginMap = flattenAndResolvePlugins(editor, plugins);\n\n  // Step 2: Filter out disabled plugins\n  const enabledPlugins = Array.from(pluginMap.values()).filter(\n    (plugin) => plugin.enabled !== false\n  );\n\n  // Step 3: Sort plugins by priority\n  enabledPlugins.sort((a, b) => b.priority - a.priority);\n\n  // Step 4: Reorder based on dependencies\n  const orderedPlugins: SlatePlugins = [];\n  const visited = new Set<string>();\n\n  const visit = (plugin: SlatePlugin) => {\n    if (visited.has(plugin.key)) return;\n\n    visited.add(plugin.key);\n\n    plugin.dependencies?.forEach((depKey) => {\n      const depPlugin = pluginMap.get(depKey);\n\n      if (depPlugin) {\n        visit(depPlugin);\n      } else {\n        editor.api.debug.warn(\n          `Plugin \"${plugin.key}\" depends on missing plugin \"${depKey}\"`,\n          'PLUGIN_DEPENDENCY_MISSING'\n        );\n      }\n    });\n\n    orderedPlugins.push(plugin);\n  };\n\n  enabledPlugins.forEach(visit);\n\n  return orderedPlugins;\n};\n\nexport const applyPluginsToEditor = (\n  editor: SlateEditor,\n  plugins: SlatePlugins\n) => {\n  editor.pluginList = plugins;\n  editor.plugins = Object.fromEntries(\n    plugins.map((plugin) => [plugin.key, plugin])\n  );\n};\n\nexport const resolvePluginOverrides = (editor: SlateEditor) => {\n  const applyOverrides = (plugins: SlatePlugin[]): SlatePlugin[] => {\n    let overriddenPlugins = [...plugins];\n\n    const enabledOverrides: Record<string, boolean> = {};\n    const componentOverrides: Record<\n      string,\n      { component: any; priority: number }\n    > = {};\n    const pluginOverrides: Record<string, Partial<SlatePlugin>> = {};\n\n    // Collect all overrides\n    for (const plugin of plugins) {\n      if (plugin.override.enabled) {\n        Object.assign(enabledOverrides, plugin.override.enabled);\n      }\n      // TODO react\n      if ((plugin.override as any).components) {\n        Object.entries((plugin.override as any).components).forEach(\n          ([key, component]) => {\n            if (\n              !componentOverrides[key] ||\n              plugin.priority > componentOverrides[key].priority\n            ) {\n              componentOverrides[key] = {\n                component,\n                priority: plugin.priority,\n              };\n            }\n          }\n        );\n      }\n      if (plugin.override.plugins) {\n        Object.entries(plugin.override.plugins).forEach(([key, value]) => {\n          pluginOverrides[key] = mergePlugins(pluginOverrides[key], value);\n\n          if (value.enabled !== undefined) {\n            enabledOverrides[key] = value.enabled;\n          }\n        });\n      }\n    }\n\n    // Apply overrides\n    overriddenPlugins = overriddenPlugins.map((p) => {\n      let updatedPlugin = { ...p };\n\n      // Apply plugin overrides\n      if (pluginOverrides[p.key]) {\n        updatedPlugin = mergePlugins(updatedPlugin, pluginOverrides[p.key]);\n      }\n      // Apply component overrides\n      // TODO react\n      if (\n        componentOverrides[p.key] &&\n        ((!(p as any).render.node && !(p as any).node.component) ||\n          componentOverrides[p.key].priority > p.priority)\n      ) {\n        (updatedPlugin as any).render.node =\n          componentOverrides[p.key].component;\n        (updatedPlugin as any).node.component =\n          componentOverrides[p.key].component;\n      }\n\n      // Apply enabled overrides\n      const enabled = enabledOverrides[p.key] ?? updatedPlugin.enabled;\n\n      if (isDefined(enabled)) {\n        updatedPlugin.enabled = enabled;\n      }\n\n      return updatedPlugin;\n    });\n\n    return overriddenPlugins\n      .filter((p) => p.enabled !== false)\n      .map((plugin) => ({\n        ...plugin,\n        plugins: applyOverrides(plugin.plugins || []),\n      }));\n  };\n\n  editor.pluginList = applyOverrides(editor.pluginList as any);\n  editor.plugins = Object.fromEntries(\n    editor.pluginList.map((plugin) => [plugin.key, plugin])\n  );\n};\n","import { createSlatePlugin } from '../plugin';\n\n/**\n * Enables support for deserializing inserted content from Slate Ast format to\n * Slate format while apply a small bug fix.\n */\nexport const AstPlugin = createSlatePlugin({\n  key: 'ast',\n  parser: {\n    format: 'application/x-slate-fragment',\n    deserialize: ({ data }) => {\n      const decoded = decodeURIComponent(window.atob(data));\n      let parsed;\n\n      try {\n        parsed = JSON.parse(decoded);\n      } catch {\n        /* empty */\n      }\n\n      return parsed;\n    },\n  },\n});\n","import { createSlatePlugin } from '../plugin';\n\n/**\n * Placeholder plugin for DOM interaction, that could be replaced with\n * ReactPlugin.\n */\nexport const DOMPlugin = createSlatePlugin({\n  key: 'dom',\n});\n","import { withHistory } from '@udecode/slate';\n\nimport type { SlateEditor } from '../editor';\n\nimport { type ExtendEditor, createSlatePlugin } from '../plugin';\n\nexport const withPlateHistory: ExtendEditor = ({ editor }) =>\n  withHistory(editor as any) as any as SlateEditor;\n\n/** @see {@link withHistory} */\nexport const HistoryPlugin = createSlatePlugin({\n  key: 'history',\n  extendEditor: withPlateHistory,\n});\n","import { type OverrideEditor, createSlatePlugin } from '../plugin';\n\n/**\n * Merge and register all the inline types and void types from the plugins and\n * options, using `editor.api.isInline`, `editor.api.markableVoid` and\n * `editor.api.isVoid`\n */\nexport const withInlineVoid: OverrideEditor = ({\n  api: { isInline, isSelectable, isVoid, markableVoid },\n  editor,\n}) => {\n  const voidTypes: string[] = [];\n  const inlineTypes: string[] = [];\n  const markableVoidTypes: string[] = [];\n  const nonSelectableTypes: string[] = [];\n\n  editor.pluginList.forEach((plugin) => {\n    if (plugin.node.isInline) {\n      inlineTypes.push(plugin.node.type);\n    }\n    if (plugin.node.isVoid) {\n      voidTypes.push(plugin.node.type);\n    }\n    if (plugin.node.isMarkableVoid) {\n      markableVoidTypes.push(plugin.node.type);\n    }\n    if (plugin.node.isSelectable === false) {\n      nonSelectableTypes.push(plugin.node.type);\n    }\n  });\n\n  return {\n    api: {\n      isInline(element) {\n        return inlineTypes.includes(element.type as any)\n          ? true\n          : isInline(element);\n      },\n      isSelectable(element) {\n        return nonSelectableTypes.includes(element.type)\n          ? false\n          : isSelectable(element);\n      },\n      isVoid(element) {\n        return voidTypes.includes(element.type as any) ? true : isVoid(element);\n      },\n      markableVoid(element) {\n        return markableVoidTypes.includes(element.type)\n          ? true\n          : markableVoid(element);\n      },\n    },\n  };\n};\n\n/** @see {@link withInlineVoid} */\nexport const InlineVoidPlugin = createSlatePlugin({\n  key: 'inlineVoid',\n}).overrideEditor(withInlineVoid);\n","import type { Descendant } from '@udecode/slate';\n\nimport type { SlateEditor } from '../../lib/editor';\nimport type { ParserOptions } from '../../lib/plugin/BasePlugin';\nimport type { AnyEditorPlugin } from '../../lib/plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../../lib/plugin';\n\n/** Pipe preInsert then insertFragment. */\nexport const pipeInsertFragment = (\n  editor: SlateEditor,\n  injectedPlugins: Partial<AnyEditorPlugin>[],\n  { fragment, ...options }: ParserOptions & { fragment: Descendant[] }\n) => {\n  editor.tf.withoutNormalizing(() => {\n    injectedPlugins.some((p) => {\n      return (\n        p.parser?.preInsert?.({\n          ...getEditorPlugin(editor, p as any),\n          fragment,\n          ...options,\n        }) === true\n      );\n    });\n\n    editor.tf.insertFragment(fragment);\n  });\n};\n","import type { SlateEditor } from '../../lib/editor';\nimport type { ParserOptions } from '../../lib/plugin/BasePlugin';\nimport type { AnyEditorPlugin } from '../../lib/plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../../lib/plugin';\n\n/** Pipe editor.tf.insertData.transformData */\nexport const pipeTransformData = (\n  editor: SlateEditor,\n  plugins: Partial<AnyEditorPlugin>[],\n  { data, dataTransfer }: ParserOptions\n) => {\n  plugins.forEach((p) => {\n    const transformData = p.parser?.transformData;\n\n    if (!transformData) return;\n\n    data = transformData({\n      ...getEditorPlugin(editor, p as any),\n      data,\n      dataTransfer,\n    });\n  });\n\n  return data;\n};\n","import type { Descendant } from '@udecode/slate';\n\nimport type { SlateEditor } from '../../lib/editor';\nimport type { ParserOptions } from '../../lib/plugin/BasePlugin';\nimport type { AnyEditorPlugin } from '../../lib/plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../../lib/plugin';\n\n/** Pipe editor.tf.insertData.transformFragment */\nexport const pipeTransformFragment = (\n  editor: SlateEditor,\n  plugins: Partial<AnyEditorPlugin>[],\n  { fragment, ...options }: ParserOptions & { fragment: Descendant[] }\n) => {\n  plugins.forEach((p) => {\n    const transformFragment = p.parser?.transformFragment;\n\n    if (!transformFragment) return;\n\n    fragment = transformFragment({\n      fragment,\n      ...options,\n      ...getEditorPlugin(editor, p as any),\n    });\n  });\n\n  return fragment;\n};\n","import {\n  type NodeEntry,\n  type NodeOf,\n  type Path,\n  type QueryNodeOptions,\n  type TNode,\n  NodeApi,\n  queryNode,\n} from '@udecode/slate';\n\nexport interface ApplyDeepToNodesOptions<N extends TNode> {\n  // Function to call on each node following the query.\n  apply: (\n    node: NodeOf<N>,\n    source: (() => Record<string, any>) | Record<string, any>\n  ) => void;\n  // The destination node object.\n  node: N;\n  // The source object. Can be a factory.\n  source: (() => Record<string, any>) | Record<string, any>;\n  path?: Path;\n  // Query to filter the nodes.\n  query?: QueryNodeOptions;\n}\n\n/** Recursively apply an operation to children nodes with a query. */\nexport const applyDeepToNodes = <N extends TNode>({\n  apply,\n  node,\n  path = [],\n  query,\n  source,\n}: ApplyDeepToNodesOptions<N>) => {\n  const entry: NodeEntry<N> = [node, path];\n\n  if (queryNode<N>(entry, query)) {\n    if (source instanceof Function) {\n      apply(node, source());\n    } else {\n      apply(node, source);\n    }\n  }\n  if (!NodeApi.isAncestor(node)) return;\n\n  node.children.forEach((child, index) => {\n    applyDeepToNodes({\n      apply,\n      node: child as any,\n      path: path.concat([index]),\n      query,\n      source,\n    });\n  });\n};\n","import { type Path, type TNode, ElementApi } from '@udecode/slate';\n\nimport type { SlateEditor } from '../editor';\nimport type { EditorPlugin } from '../plugin';\n\nimport { getKeyByType, getKeysByTypes } from './getKeysByTypes';\n\nexport const getInjectMatch = <E extends SlateEditor>(\n  editor: E,\n  plugin: EditorPlugin\n) => {\n  return (node: TNode, path: Path) => {\n    const {\n      inject: {\n        excludeBelowPlugins,\n        excludePlugins,\n        isBlock: _isBlock,\n        isElement: _isElement,\n        isLeaf,\n        maxLevel,\n        targetPlugins,\n      },\n    } = plugin;\n\n    const element = ElementApi.isElement(node) ? node : undefined;\n\n    if (_isElement && !element) return false;\n    if (_isBlock && (!element || !editor.api.isBlock(element))) return false;\n    if (isLeaf && element) return false;\n    if (element?.type) {\n      // Exclude plugins\n      if (excludePlugins?.includes(getKeyByType(editor, element.type))) {\n        return false;\n      }\n      // Target plugins\n      if (\n        targetPlugins &&\n        !targetPlugins.includes(getKeyByType(editor, element.type))\n      ) {\n        return false;\n      }\n    }\n    // Exclude below plugins\n    if (excludeBelowPlugins || maxLevel) {\n      if (maxLevel && path.length > maxLevel) {\n        return false;\n      }\n      if (excludeBelowPlugins) {\n        const excludeTypes = getKeysByTypes(editor, excludeBelowPlugins);\n        const isBelow = editor.api.above({\n          at: path,\n          match: (n) =>\n            ElementApi.isElement(n) && excludeTypes.includes(n.type),\n        });\n\n        if (isBelow) return false;\n      }\n    }\n\n    return true;\n  };\n};\n","import type { SlateEditor } from '../editor';\n\n/** Get plugin keys by types */\nexport const getKeysByTypes = (\n  editor: SlateEditor,\n  types: string[]\n): string[] => {\n  return Object.values(editor.plugins)\n    .filter((plugin) => types.includes(plugin.node.type))\n    .map((plugin) => plugin.key);\n};\n\n/** Get plugin key by type */\nexport const getKeyByType = (editor: SlateEditor, type: string): string => {\n  const plugin = Object.values(editor.plugins).find(\n    (plugin) => plugin.node.type === type\n  );\n\n  return plugin?.key ?? type;\n};\n","import type { SlateEditor } from '../editor';\nimport type { AnyEditorPlugin, SlatePlugins } from '../plugin/SlatePlugin';\n\n/**\n * Get all plugins having a defined `inject.plugins[plugin.key]`. It includes\n * `plugin` itself.\n */\nexport const getInjectedPlugins = (\n  editor: SlateEditor,\n  plugin: AnyEditorPlugin\n): Partial<AnyEditorPlugin>[] => {\n  const injectedPlugins: SlatePlugins = [];\n\n  [...editor.pluginList].reverse().forEach((p) => {\n    const injectedPlugin = p.inject.plugins?.[plugin.key];\n\n    if (injectedPlugin) injectedPlugins.push(injectedPlugin as any);\n  });\n\n  return [plugin, ...injectedPlugins];\n};\n","import type { TElement, TText } from '@udecode/slate';\nimport type { AnyObject } from '@udecode/utils';\n\nimport pick from 'lodash/pick.js';\n\nimport type { AnyEditorPlugin } from '../plugin';\n\nimport { type SlateRenderNodeProps, getNodeDataAttributeKeys } from '../static';\n\nexport const getPluginNodeProps = ({\n  attributes,\n  node,\n  plugin,\n  props,\n}: {\n  props: SlateRenderNodeProps;\n  attributes?: AnyObject;\n  node?: TElement | TText;\n  plugin?: AnyEditorPlugin;\n}): any => {\n  let newProps: AnyObject = {};\n\n  if (plugin?.node.props) {\n    newProps =\n      (typeof plugin.node.props === 'function'\n        ? plugin.node.props(props as any)\n        : plugin.node.props) ?? {};\n  }\n  if (!newProps.nodeProps && attributes && plugin) {\n    /**\n     * WARNING: Improper use of `dangerouslyAllowAttributes` WILL make your\n     * application vulnerable to cross-site scripting (XSS) or information\n     * exposure attacks.\n     *\n     * @see {@link BasePluginNode.dangerouslyAllowAttributes}\n     */\n    newProps.nodeProps = pick(attributes, [\n      ...(plugin.node.dangerouslyAllowAttributes ?? []),\n      ...(node ? getNodeDataAttributeKeys(node) : []),\n    ]);\n  } else if (newProps.nodeProps && attributes && plugin) {\n    // Add data attributes to nodeProps if nodeProps is already set\n    newProps.nodeProps = {\n      ...newProps.nodeProps,\n      ...pick(attributes, [...(node ? getNodeDataAttributeKeys(node) : [])]),\n    };\n  }\n\n  props = { ...props, ...newProps };\n\n  if (props.nodeProps) {\n    // remove attributes values that are undefined\n    Object.keys(props.nodeProps).forEach((key) => {\n      if (props.nodeProps?.[key] === undefined) {\n        delete props.nodeProps?.[key];\n      }\n    });\n  }\n\n  return props;\n};\n","import { type TElement, type TText, TextApi } from '@udecode/slate';\nimport kebabCase from 'lodash/kebabCase.js';\n\nimport type { SlateEditor } from '../../editor';\n\nimport { type AnyEditorPlugin, getEditorPlugin } from '../../plugin';\n\nexport const getNodeDataAttributes = (\n  node: TElement | TText,\n  { isElement, isLeaf }: { isElement?: boolean; isLeaf?: boolean }\n) => {\n  const dataAttributes = Object.keys(node).reduce((acc, key) => {\n    if (typeof node[key] === 'object') return acc;\n    if (isElement && key === 'children') return acc;\n    if (isLeaf && key === 'text') return acc;\n\n    const attributeName = keyToDataAttribute(key);\n\n    return {\n      ...acc,\n      [attributeName]: node[key],\n    };\n  }, {});\n\n  return dataAttributes;\n};\n\nexport const getPluginDataAttributes = (\n  editor: SlateEditor,\n  plugin: AnyEditorPlugin,\n  node: TElement | TText\n) => {\n  const isElement = plugin.node.isElement;\n\n  const isLeaf = plugin.node.isLeaf;\n\n  const dataAttributes = getNodeDataAttributes(node, { isElement, isLeaf });\n\n  const customAttributes =\n    plugin.node.toDataAttributes?.({\n      ...(plugin ? (getEditorPlugin(editor, plugin) as any) : {}),\n      node,\n    }) ?? {};\n\n  return { ...dataAttributes, ...customAttributes };\n};\n\nexport const getLeafDataAttributes = (leaf: TText) =>\n  getNodeDataAttributes(leaf, { isElement: false, isLeaf: true });\n\nexport const getNodeDataAttributeKeys = (node: TElement | TText) => {\n  return Object.keys(node)\n    .filter(\n      (key) =>\n        typeof node[key] !== 'object' &&\n        (!TextApi.isText(node) || key !== 'text')\n    )\n    .map((key) => keyToDataAttribute(key));\n};\n\nexport const keyToDataAttribute = (key: string) => {\n  return `data-slate-${kebabCase(key)}`;\n};\n","import type { Path, TElement, TText } from '@udecode/slate';\n\nimport clsx from 'clsx';\n\nimport type { SlateEditor } from '../../lib/editor';\n\nimport { pluginInjectNodeProps } from './pluginInjectNodeProps';\n\n/** Inject plugin props, editor. */\nexport const pipeInjectNodeProps = (\n  editor: SlateEditor,\n  nodeProps: any,\n  getElementPath: (node: TElement | TText) => Path\n) => {\n  editor.pluginList.forEach((plugin) => {\n    if (plugin.inject.nodeProps) {\n      const newProps = pluginInjectNodeProps(\n        editor,\n        plugin,\n        nodeProps,\n        getElementPath\n      );\n\n      if (!newProps) return;\n\n      nodeProps = {\n        ...nodeProps,\n        ...newProps,\n        className: clsx(nodeProps.className, newProps.className),\n        style: {\n          ...nodeProps.style,\n          ...newProps.style,\n        },\n      };\n    }\n  });\n\n  return nodeProps;\n};\n","import type { Path, TElement, TText } from '@udecode/slate';\n\nimport { isDefined } from '@udecode/utils';\n\nimport type { SlateEditor } from '../../lib/editor';\nimport type {\n  EditorPlugin,\n  TransformOptions,\n} from '../../lib/plugin/SlatePlugin';\n\nimport {\n  type GetInjectNodePropsOptions,\n  type GetInjectNodePropsReturnType,\n  getEditorPlugin,\n} from '../../lib/plugin';\nimport { getInjectMatch } from '../../lib/utils/getInjectMatch';\n\n/**\n * Return if `element`, `text`, `nodeKey` is defined. Return if `node.type` is\n * not in `targetPlugins` (if defined). Return if `value = node[nodeKey]` is not\n * in `validNodeValues` (if defined). If `classNames[value]` is defined,\n * override `className` with it. If `styleKey` is defined, override `style` with\n * `[styleKey]: value`.\n */\nexport const pluginInjectNodeProps = (\n  editor: SlateEditor,\n  plugin: EditorPlugin,\n  nodeProps: GetInjectNodePropsOptions,\n  getElementPath: (node: TElement | TText) => Path\n): GetInjectNodePropsReturnType | undefined => {\n  const {\n    key,\n    inject: { nodeProps: injectNodeProps },\n  } = plugin;\n\n  const { element, text } = nodeProps;\n\n  const node = element ?? text;\n\n  if (!node) return;\n  if (!injectNodeProps) return;\n\n  const {\n    classNames,\n    defaultNodeValue,\n    nodeKey = key,\n    query,\n    styleKey = nodeKey as any,\n    transformClassName,\n    transformNodeValue,\n    transformProps,\n    transformStyle,\n    validNodeValues,\n  } = injectNodeProps;\n\n  const injectMatch = getInjectMatch(editor, plugin);\n\n  if (!injectMatch(node, getElementPath(node))) return;\n\n  const queryResult = query?.({\n    ...injectNodeProps,\n    ...(getEditorPlugin(editor, plugin) as any),\n    nodeProps,\n  });\n\n  if (query && !queryResult) {\n    return;\n  }\n\n  const nodeValue = node[nodeKey!] as any;\n\n  // early return if there is no reason to inject props\n  if (\n    !transformProps &&\n    (!isDefined(nodeValue) ||\n      (validNodeValues && !validNodeValues.includes(nodeValue)) ||\n      nodeValue === defaultNodeValue)\n  ) {\n    return;\n  }\n\n  const transformOptions: TransformOptions = {\n    ...nodeProps,\n    ...(getEditorPlugin(editor, plugin) as any),\n    nodeValue,\n  };\n  const value = transformNodeValue?.(transformOptions) ?? nodeValue;\n  transformOptions.value = value;\n\n  let newProps: GetInjectNodePropsReturnType = {};\n\n  if (element && nodeKey) {\n    newProps.className = `slate-${nodeKey}-${nodeValue}`;\n  }\n  if (classNames?.[nodeValue] || transformClassName) {\n    newProps.className =\n      transformClassName?.(transformOptions) ?? classNames?.[value];\n  }\n  if (styleKey) {\n    newProps.style =\n      transformStyle?.(transformOptions) ??\n      ({\n        [styleKey as string]: value,\n      } as any);\n  }\n  if (transformProps) {\n    newProps =\n      transformProps({ ...transformOptions, props: newProps }) ?? newProps;\n  }\n\n  return newProps;\n};\n","import type { NodeEntry, TRange } from '@udecode/slate';\n\nimport type { SlateEditor } from '../../editor';\nimport type { EditableProps } from '../../types/EditableProps';\n\nimport { getEditorPlugin } from '../../plugin';\n\n/**\n * @see {@link Decorate} .\n * Optimization: return undefined if empty list so Editable uses a memo.\n */\nexport const pipeDecorate = (\n  editor: SlateEditor,\n  decorateProp?:\n    | ((ctx: { editor: SlateEditor; entry: NodeEntry }) => TRange[] | undefined)\n    | null\n): EditableProps['decorate'] => {\n  const relevantPlugins = editor.pluginList.filter((plugin) => plugin.decorate);\n\n  if (relevantPlugins.length === 0 && !decorateProp) return;\n\n  return (entry: NodeEntry) => {\n    let ranges: TRange[] = [];\n\n    const addRanges = (newRanges?: TRange[]) => {\n      if (newRanges?.length) ranges = [...ranges, ...newRanges];\n    };\n\n    relevantPlugins.forEach((plugin) => {\n      addRanges(\n        plugin.decorate!({\n          ...(getEditorPlugin(editor, plugin) as any),\n          entry,\n        })\n      );\n    });\n\n    if (decorateProp) {\n      addRanges(\n        decorateProp({\n          editor,\n          entry,\n        })\n      );\n    }\n\n    return ranges;\n  };\n};\n","export const isSlateVoid = (element: HTMLElement) => {\n  return element.dataset.slateVoid === 'true';\n};\n\nexport const isSlateElement = (element: HTMLElement) => {\n  return element.dataset.slateNode === 'element';\n};\n\nexport const isSlateText = (element: HTMLElement) => {\n  return element.dataset.slateNode === 'text';\n};\n\nexport const isSlateString = (element: HTMLElement) => {\n  return element.dataset.slateString === 'true';\n};\n\nexport const isSlateLeaf = (element: HTMLElement) => {\n  return element.dataset.slateLeaf === 'true';\n};\n\nexport const isSlateEditor = (element: HTMLElement) => {\n  return element.dataset.slateEditor === 'true';\n};\n\nexport const isSlateNode = (element: HTMLElement) => {\n  return (\n    isSlateLeaf(element) ||\n    isSlateElement(element) ||\n    isSlateVoid(element) ||\n    isSlateString(element) ||\n    isSlateText(element)\n  );\n};\n\nexport const isSlatePluginElement = (\n  element: HTMLElement,\n  pluginKey: string\n) => {\n  return (\n    element.dataset.slateNode === 'element' &&\n    element.classList.contains(`slate-${pluginKey}`)\n  );\n};\n\nexport const isSlatePluginNode = (element: HTMLElement, pluginKey: string) => {\n  return element.classList.contains(`slate-${pluginKey}`);\n};\n\nexport const getSlateElements = (element: HTMLElement): HTMLElement[] => {\n  return Array.from(element.querySelectorAll('[data-slate-node=\"element\"]'));\n};\n","/** Get slate class name: slate-<type> */\nexport const getSlateClass = (type?: string) => (type ? `slate-${type}` : '');\n","import type { TNode } from '@udecode/slate';\n\nimport merge from 'lodash/merge.js';\n\nimport {\n  type ApplyDeepToNodesOptions,\n  applyDeepToNodes,\n} from './applyDeepToNodes';\n\n/** Recursively merge a source object to children nodes with a query. */\nexport const mergeDeepToNodes = <N extends TNode>(\n  options: Omit<ApplyDeepToNodesOptions<N>, 'apply'>\n) => {\n  applyDeepToNodes({ ...options, apply: merge });\n};\n","import {\n  type Descendant,\n  type Editor,\n  ElementApi,\n  TextApi,\n} from '@udecode/slate';\n\nimport type { SlateEditor } from '../editor';\nimport type { WithRequiredKey } from '../plugin';\n\nimport { BaseParagraphPlugin } from '../plugins';\n\nconst isInlineNode = (editor: Editor) => (node: Descendant) =>\n  TextApi.isText(node) ||\n  (ElementApi.isElement(node) && editor.api.isInline(node));\n\nconst makeBlockLazy = (type: string) => (): Descendant => ({\n  children: [],\n  type,\n});\n\nconst hasDifferentChildNodes = (\n  descendants: Descendant[],\n  isInline: (node: Descendant) => boolean\n): boolean => {\n  return descendants.some((descendant, index, arr) => {\n    const prevDescendant = arr[index - 1];\n\n    if (index !== 0) {\n      return isInline(descendant) !== isInline(prevDescendant);\n    }\n\n    return false;\n  });\n};\n\n/**\n * Handles 3rd constraint: \"Block nodes can only contain other blocks, or inline\n * and text nodes.\"\n */\nconst normalizeDifferentNodeTypes = (\n  descendants: Descendant[],\n  isInline: (node: Descendant) => boolean,\n  makeDefaultBlock: () => Descendant\n): Descendant[] => {\n  const hasDifferentNodes = hasDifferentChildNodes(descendants, isInline);\n\n  const { fragment } = descendants.reduce(\n    (memo, node) => {\n      if (hasDifferentNodes && isInline(node)) {\n        let block = memo.precedingBlock;\n\n        if (!block) {\n          block = makeDefaultBlock();\n          memo.precedingBlock = block;\n          memo.fragment.push(block);\n        }\n\n        (block.children as Descendant[]).push(node);\n      } else {\n        memo.fragment.push(node);\n        memo.precedingBlock = null;\n      }\n\n      return memo;\n    },\n    {\n      fragment: [] as Descendant[],\n      precedingBlock: null as Descendant | null,\n    }\n  );\n\n  return fragment;\n};\n\n/**\n * Handles 1st constraint: \"All Element nodes must contain at least one Text\n * descendant.\"\n */\nconst normalizeEmptyChildren = (descendants: Descendant[]): Descendant[] => {\n  if (descendants.length === 0) {\n    return [{ text: '' } as Descendant];\n  }\n\n  return descendants;\n};\n\nconst normalize = (\n  descendants: Descendant[],\n  isInline: (node: Descendant) => boolean,\n  makeDefaultBlock: () => Descendant\n): Descendant[] => {\n  descendants = normalizeEmptyChildren(descendants);\n  descendants = normalizeDifferentNodeTypes(\n    descendants,\n    isInline,\n    makeDefaultBlock\n  );\n\n  descendants = descendants.map((node) => {\n    if (ElementApi.isElement(node)) {\n      return {\n        ...node,\n        children: normalize(\n          node.children as Descendant[],\n          isInline,\n          makeDefaultBlock\n        ),\n      };\n    }\n\n    return node;\n  });\n\n  return descendants;\n};\n\n/** Normalize the descendants to a valid document fragment. */\nexport const normalizeDescendantsToDocumentFragment = (\n  editor: SlateEditor,\n  {\n    defaultElementPlugin = BaseParagraphPlugin,\n    descendants,\n  }: { descendants: Descendant[]; defaultElementPlugin?: WithRequiredKey }\n): Descendant[] => {\n  const isInline = isInlineNode(editor);\n  const defaultType = editor.getType(defaultElementPlugin);\n  const makeDefaultBlock = makeBlockLazy(defaultType);\n\n  return normalize(descendants, isInline, makeDefaultBlock as any);\n};\n","import type { DebugConfig } from '../getCorePlugins';\n\nimport { createTSlatePlugin } from '../../plugin';\n\nexport type DebugErrorType =\n  | (string & {})\n  | 'DEFAULT'\n  | 'OPTION_UNDEFINED'\n  | 'OVERRIDE_MISSING'\n  | 'PLUGIN_DEPENDENCY_MISSING'\n  | 'PLUGIN_MISSING'\n  | 'USE_CREATE_PLUGIN'\n  | 'USE_ELEMENT_CONTEXT';\n\nexport type LogLevel = 'error' | 'info' | 'log' | 'warn';\n\nexport class PlateError extends Error {\n  constructor(\n    message: string,\n    public type: DebugErrorType = 'DEFAULT'\n  ) {\n    super(`[${type}] ${message}`);\n    this.name = 'PlateError';\n  }\n}\n\nexport const DebugPlugin = createTSlatePlugin<DebugConfig>({\n  key: 'debug',\n  options: {\n    isProduction: process.env.NODE_ENV === 'production',\n    logger: {\n      error: (message, type, details) =>\n        console.error(`${type ? `[${type}] ` : ''}${message}`, details),\n      info: (message, type, details) =>\n        console.info(`${type ? `[${type}] ` : ''}${message}`, details),\n      log: (message, type, details) =>\n        console.log(`${type ? `[${type}] ` : ''}${message}`, details),\n      warn: (message, type, details) =>\n        console.warn(`${type ? `[${type}] ` : ''}${message}`, details),\n    },\n    logLevel:\n      process.env.NODE_ENV === 'production' ? 'error' : ('log' as LogLevel),\n    throwErrors: true,\n  },\n}).extendEditorApi<DebugConfig['api']>(({ getOptions }) => {\n  const logLevels: LogLevel[] = ['error', 'warn', 'info', 'log'];\n\n  const log = (\n    level: LogLevel,\n    message: any,\n    type?: DebugErrorType,\n    details?: any\n  ) => {\n    if (process.env.NODE_ENV === 'production') return;\n\n    const options = getOptions();\n\n    if (options.isProduction && level === 'log') return;\n    if (logLevels.indexOf(level) <= logLevels.indexOf(options.logLevel!)) {\n      if (level === 'error' && options.throwErrors) {\n        throw new PlateError(message, type);\n      } else {\n        options.logger[level]?.(message, type, details);\n      }\n    }\n  };\n\n  return {\n    debug: {\n      error: (message, type, details) => log('error', message, type, details),\n      info: (message, type, details) => log('info', message, type, details),\n      log: (message, type, details) => log('log', message, type, details),\n      warn: (message, type, details) => log('warn', message, type, details),\n    },\n  };\n});\n","import { bindFirst } from '@udecode/utils';\n\nimport { createSlatePlugin } from '../../plugin';\nimport { deserializeHtml, parseHtmlDocument } from './utils';\n\n/**\n * Enables support for deserializing inserted content from HTML format to Slate\n * format and serializing Slate content to HTML format.\n */\nexport const HtmlPlugin = createSlatePlugin({\n  key: 'html',\n})\n  .extendApi(({ editor }) => ({\n    deserialize: bindFirst(deserializeHtml, editor),\n  }))\n  .extend({\n    parser: {\n      format: 'text/html',\n      deserialize: ({ api, data }) => {\n        const document = parseHtmlDocument(data);\n\n        return api.html.deserialize({\n          element: document.body,\n        });\n      },\n    },\n  });\n","export const isHtmlElement = (node: Node): node is Element =>\n  node.nodeType === Node.ELEMENT_NODE;\n","export const isHtmlText = (node: Node): node is Text =>\n  node.nodeType === Node.TEXT_NODE;\n","/**\n * # Methodology\n *\n * ## Step 1. Get the list of all standard tag names\n *\n * Go to https://developer.mozilla.org/en-US/docs/Web/HTML/Element and run the\n * following in the console to generate a JSON array of tag names:\n *\n * ```js\n * JSON.stringify(\n *   Array.from(document.querySelectorAll('article table td:first-child'))\n *     .map((td) => {\n *       const body = document.createElement('body');\n *       body.innerHTML = td.textContent;\n *       return body.firstChild?.tagName;\n *     })\n *     .filter((tagName) => tagName)\n * );\n * ```\n *\n * Output (as of 2023-11-06):\n *\n * ```json\n * '[\"BASE\",\"LINK\",\"META\",\"STYLE\",\"TITLE\",\"ADDRESS\",\"ARTICLE\",\"ASIDE\",\"FOOTER\",\"HEADER\",\"H1\",\"HGROUP\",\"MAIN\",\"NAV\",\"SECTION\",\"SEARCH\",\"BLOCKQUOTE\",\"DD\",\"DIV\",\"DL\",\"DT\",\"FIGCAPTION\",\"FIGURE\",\"HR\",\"LI\",\"MENU\",\"OL\",\"P\",\"PRE\",\"UL\",\"A\",\"ABBR\",\"B\",\"BDI\",\"BDO\",\"BR\",\"CITE\",\"CODE\",\"DATA\",\"DFN\",\"EM\",\"I\",\"KBD\",\"MARK\",\"Q\",\"RP\",\"RT\",\"RUBY\",\"S\",\"SAMP\",\"SMALL\",\"SPAN\",\"STRONG\",\"SUB\",\"SUP\",\"TIME\",\"U\",\"VAR\",\"WBR\",\"AREA\",\"AUDIO\",\"IMG\",\"MAP\",\"TRACK\",\"VIDEO\",\"EMBED\",\"IFRAME\",\"OBJECT\",\"PICTURE\",\"PORTAL\",\"SOURCE\",\"svg\",\"math\",\"CANVAS\",\"NOSCRIPT\",\"SCRIPT\",\"DEL\",\"INS\",\"TABLE\",\"BUTTON\",\"DATALIST\",\"FIELDSET\",\"FORM\",\"INPUT\",\"LABEL\",\"LEGEND\",\"METER\",\"OPTGROUP\",\"OPTION\",\"OUTPUT\",\"PROGRESS\",\"SELECT\",\"TEXTAREA\",\"DETAILS\",\"DIALOG\",\"SUMMARY\",\"SLOT\",\"TEMPLATE\",\"ACRONYM\",\"BIG\",\"CENTER\",\"CONTENT\",\"DIR\",\"FONT\",\"IMG\",\"MARQUEE\",\"MENUITEM\",\"NOBR\",\"NOEMBED\",\"NOFRAMES\",\"PARAM\",\"PLAINTEXT\",\"RB\",\"RTC\",\"SHADOW\",\"STRIKE\",\"TT\",\"XMP\"]'\n * ```\n *\n * ## Step 2. For each tag name, determine the default browser style\n *\n * Open an empty HTML file in the browser and run the following in the console:\n *\n * ```js\n * const tagNames = JSON.parse(<JSON string from step 1>);\n *\n * JSON.stringify(\n *   tagNames.filter((tagName) => {\n *     const element = document.createElement(tagName);\n *     document.body.appendChild(element);\n *     const display = window.getComputedStyle(element).display;\n *     element.remove();\n *     return display.startsWith('inline');\n *   })\n * );\n * ```\n *\n * Place the result in the array below (accurate as of 2023-11-06).\n */\n\nexport const inlineTagNames = new Set([\n  'A',\n  'ABBR',\n  'ACRONYM',\n  'B',\n  'BDI',\n  'BDO',\n  'BIG',\n  'BR',\n  'BUTTON',\n  'CANVAS',\n  'CITE',\n  'CODE',\n  'CONTENT',\n  'DATA',\n  'DEL',\n  'DFN',\n  'EM',\n  'EMBED',\n  'FONT',\n  'I',\n  'IFRAME',\n  'IMG',\n  'IMG',\n  'INPUT',\n  'INS',\n  'KBD',\n  'LABEL',\n  'MAP',\n  'MARK',\n  'MARQUEE',\n  'math',\n  'MENUITEM',\n  'METER',\n  'NOBR',\n  'OBJECT',\n  'OUTPUT',\n  'PICTURE',\n  'PORTAL',\n  'PROGRESS',\n  'Q',\n  'S',\n  'SAMP',\n  'SELECT',\n  'SHADOW',\n  'SMALL',\n  'SOURCE',\n  'SPAN',\n  'STRIKE',\n  'STRONG',\n  'SUB',\n  'SUP',\n  'svg',\n  'TEXTAREA',\n  'TIME',\n  'TRACK',\n  'TT',\n  'U',\n  'VAR',\n  'VIDEO',\n  'WBR',\n]);\n","import { inlineTagNames } from './inlineTagNames';\nimport { isHtmlElement } from './isHtmlElement';\n\nexport const isHtmlInlineElement = (node: Node): boolean => {\n  if (!isHtmlElement(node)) return false;\n\n  const element = node as HTMLElement;\n\n  const tagNameIsInline = inlineTagNames.has(element.tagName);\n\n  /**\n   * Valid display values include 'inline flow'. We only care about the first\n   * part.\n   */\n  const displayProperty = element.style.display.split(' ')[0];\n\n  if (displayProperty === '') {\n    return tagNameIsInline;\n  }\n  if (displayProperty.startsWith('inline')) {\n    return true;\n  }\n  if (displayProperty === 'inherit' && element.parentElement) {\n    return isHtmlInlineElement(element.parentElement);\n  }\n  /**\n   * Handle all special values manually, so that any unhandled values can be\n   * assumed to be block.\n   *\n   * Note: Ideally, content inside `display: none` elements should not be\n   * parsed. However, if such elements are parsed, it's best for their inline or\n   * block status to be left unchanged.\n   */\n  if (\n    ['contents', 'initial', 'none', 'revert', 'revert-layer', 'unset'].includes(\n      displayProperty\n    )\n  ) {\n    return tagNameIsInline;\n  }\n\n  return false;\n};\n","import { isHtmlElement } from './isHtmlElement';\nimport { isHtmlInlineElement } from './isHtmlInlineElement';\n\nexport const isHtmlBlockElement = (node: Node): boolean => {\n  if (!isHtmlElement(node)) return false;\n\n  const element = node as HTMLElement;\n\n  return !isHtmlInlineElement(element);\n};\n","import type { TrimEndRule, TrimStartRule } from './types';\n\nexport const collapseString = (\n  text: string,\n  {\n    shouldCollapseWhiteSpace = true,\n    trimEnd = 'collapse',\n    trimStart = 'collapse',\n    whiteSpaceIncludesNewlines = true,\n  }: {\n    shouldCollapseWhiteSpace?: boolean;\n    trimEnd?: TrimEndRule;\n    trimStart?: TrimStartRule;\n    whiteSpaceIncludesNewlines?: boolean;\n  } = {}\n) => {\n  if (trimStart === 'all') {\n    text = text.replace(/^\\s+/, '');\n  }\n  if (trimEnd === 'single-newline') {\n    // Strip at most one newline from the end\n    text = text.replace(/\\n$/, '');\n  }\n  if (shouldCollapseWhiteSpace) {\n    if (whiteSpaceIncludesNewlines) {\n      text = text.replaceAll(/\\s+/g, ' ');\n    } else {\n      // Collapse horizontal whitespace\n      text = text.replaceAll(/[^\\S\\n\\r]+/g, ' ');\n\n      /**\n       * Trim horizontal whitespace from the start and end of lines (behavior of\n       * pre-line).\n       */\n      text = text.replaceAll(/^[^\\S\\n\\r]+/gm, '');\n      text = text.replaceAll(/[^\\S\\n\\r]+$/gm, '');\n    }\n  }\n\n  return text;\n};\n","import { isHtmlBlockElement } from '../isHtmlBlockElement';\n\nexport const isLastNonEmptyTextOfInlineFormattingContext = (\n  initialText: Text\n): boolean => {\n  let currentNode: Node | null = initialText;\n\n  while (true) {\n    if (currentNode.nextSibling) {\n      currentNode = currentNode.nextSibling;\n    } else {\n      // If there is no next sibling, ascend to the parent node\n      currentNode = currentNode.parentElement;\n\n      // If the parent node is a block, we've reached the end\n      if (currentNode && isHtmlBlockElement(currentNode)) {\n        return true;\n      }\n\n      // Otherwise, continue to the next sibling of the parent node\n      currentNode = currentNode?.nextSibling || null;\n    }\n    // If there's no next node, we've reached the end\n    if (!currentNode) {\n      return true;\n    }\n    // If the next node is a block, we've reached the end\n    if (isHtmlBlockElement(currentNode)) {\n      return true;\n    }\n    // If the next node is a non-empty text node, we're not at the end\n    if ((currentNode.textContent || '').length > 0) {\n      return false;\n    }\n\n    // Otherwise, continue to the next node\n  }\n};\n","import type { CollapseWhiteSpaceState } from './types';\n\nexport const upsertInlineFormattingContext = (\n  state: CollapseWhiteSpaceState\n) => {\n  if (state.inlineFormattingContext) {\n    state.inlineFormattingContext.atStart = false;\n  } else {\n    state.inlineFormattingContext = {\n      atStart: true,\n      lastHasTrailingWhiteSpace: false,\n    };\n  }\n};\n\nexport const endInlineFormattingContext = (state: CollapseWhiteSpaceState) => {\n  state.inlineFormattingContext = null;\n};\n","import type {\n  CollapseWhiteSpaceState,\n  TrimEndRule,\n  TrimStartRule,\n} from './types';\n\nimport { collapseString } from './collapseString';\nimport { isLastNonEmptyTextOfInlineFormattingContext } from './isLastNonEmptyTextOfInlineFormattingContext';\nimport { upsertInlineFormattingContext } from './stateTransforms';\n\nexport const collapseWhiteSpaceText = (\n  text: Text,\n  state: CollapseWhiteSpaceState\n) => {\n  const textContent = text.textContent || '';\n  const isWhiteSpaceOnly = textContent.trim() === '';\n\n  /**\n   * Do not start an inline formatting context with a text node containing only\n   * white space.\n   */\n  if (state.inlineFormattingContext || !isWhiteSpaceOnly) {\n    upsertInlineFormattingContext(state);\n  }\n\n  const { whiteSpaceRule } = state;\n\n  /**\n   * Note: Due to the way HTML strings are parsed in htmlStringToDOMNode, up to\n   * one newline is already trimmed from the start of text nodes inside <pre>\n   * elements. If we do so again here, we may remove too many newlines. This\n   * only applies to actual <pre> elements, not elements with the white-space\n   * CSS property.\n   */\n  const trimStart: TrimStartRule = (() => {\n    if (whiteSpaceRule !== 'normal') return 'collapse';\n    if (\n      !state.inlineFormattingContext ||\n      state.inlineFormattingContext.atStart ||\n      state.inlineFormattingContext.lastHasTrailingWhiteSpace\n    )\n      return 'all';\n\n    return 'collapse';\n  })();\n\n  const trimEnd: TrimEndRule = (() => {\n    if (whiteSpaceRule === 'normal') return 'collapse';\n    if (isLastNonEmptyTextOfInlineFormattingContext(text))\n      return 'single-newline';\n\n    return 'collapse';\n  })();\n\n  const shouldCollapseWhiteSpace: boolean = {\n    normal: true,\n    pre: false,\n    'pre-line': true,\n  }[whiteSpaceRule];\n\n  const whiteSpaceIncludesNewlines = whiteSpaceRule !== 'pre-line';\n\n  const collapsedTextContent = collapseString(textContent || '', {\n    shouldCollapseWhiteSpace,\n    trimEnd,\n    trimStart,\n    whiteSpaceIncludesNewlines,\n  });\n\n  if (state.inlineFormattingContext && shouldCollapseWhiteSpace) {\n    state.inlineFormattingContext.lastHasTrailingWhiteSpace =\n      collapsedTextContent.endsWith(' ');\n  }\n\n  text.textContent = collapsedTextContent;\n};\n","import type { CollapseWhiteSpaceState } from './types';\n\nimport { isHtmlElement } from '../isHtmlElement';\nimport { isHtmlText } from '../isHtmlText';\nimport { collapseWhiteSpaceChildren } from './collapseWhiteSpaceChildren';\nimport { collapseWhiteSpaceElement } from './collapseWhiteSpaceElement';\nimport { collapseWhiteSpaceText } from './collapseWhiteSpaceText';\n\nexport const collapseWhiteSpaceNode = (\n  node: Node,\n  state: CollapseWhiteSpaceState\n) => {\n  if (isHtmlElement(node)) {\n    collapseWhiteSpaceElement(node as HTMLElement, state);\n\n    return;\n  }\n  if (isHtmlText(node)) {\n    collapseWhiteSpaceText(node as Text, state);\n\n    return;\n  }\n\n  collapseWhiteSpaceChildren(node, state);\n};\n","import type { CollapseWhiteSpaceState } from './types';\n\nimport { collapseWhiteSpaceNode } from './collapseWhiteSpaceNode';\n\nexport const collapseWhiteSpaceChildren = (\n  node: Node,\n  state: CollapseWhiteSpaceState\n) => {\n  const childNodes = Array.from(node.childNodes);\n\n  for (const childNode of childNodes) {\n    collapseWhiteSpaceNode(childNode, state);\n  }\n};\n","import type { WhiteSpaceRule } from './types';\n\nexport const inferWhiteSpaceRule = (\n  element: HTMLElement\n): WhiteSpaceRule | null => {\n  const whiteSpaceProperty = element.style.whiteSpace;\n\n  switch (whiteSpaceProperty) {\n    case 'break-spaces':\n    case 'pre':\n    case 'pre-wrap': {\n      return 'pre';\n    }\n    case 'normal':\n    case 'nowrap': {\n      return 'normal';\n    }\n    case 'pre-line': {\n      return 'pre-line';\n    }\n  }\n\n  if (element.tagName === 'PRE') {\n    return 'pre';\n  }\n  if (whiteSpaceProperty === 'initial') {\n    return 'normal';\n  }\n\n  return null;\n};\n","import type { CollapseWhiteSpaceState } from './types';\n\nimport { isHtmlInlineElement } from '../isHtmlInlineElement';\nimport { collapseWhiteSpaceChildren } from './collapseWhiteSpaceChildren';\nimport { inferWhiteSpaceRule } from './inferWhiteSpaceRule';\nimport { endInlineFormattingContext } from './stateTransforms';\n\n/**\n * Note: We do not want to start an inline formatting context until we encounter\n * a text node.\n */\nexport const collapseWhiteSpaceElement = (\n  element: HTMLElement,\n  state: CollapseWhiteSpaceState\n) => {\n  const isInlineElement = isHtmlInlineElement(element);\n  const previousWhiteSpaceRule = state.whiteSpaceRule;\n  const inferredWhiteSpaceRule = inferWhiteSpaceRule(element);\n\n  if (inferredWhiteSpaceRule) {\n    state.whiteSpaceRule = inferredWhiteSpaceRule;\n  }\n  // End any existing inline formatting context\n  if (!isInlineElement) {\n    endInlineFormattingContext(state);\n  }\n\n  collapseWhiteSpaceChildren(element, state);\n\n  // Do not let inline formatting context break out of block elements\n  if (!isInlineElement) {\n    endInlineFormattingContext(state);\n  }\n\n  // Restore previous whiteSpaceRule\n  state.whiteSpaceRule = previousWhiteSpaceRule;\n};\n","import type { CollapseWhiteSpaceState } from './types';\n\nimport { collapseWhiteSpaceElement } from './collapseWhiteSpaceElement';\n\n// Entrypoint\nexport const collapseWhiteSpace = (element: HTMLElement) => {\n  const clonedElement = element.cloneNode(true) as HTMLElement;\n\n  // Mutable state object\n  const state: CollapseWhiteSpaceState = {\n    inlineFormattingContext: null,\n    whiteSpaceRule: 'normal',\n  };\n\n  collapseWhiteSpaceElement(clonedElement, state);\n\n  return clonedElement;\n};\n","import type { Descendant } from '@udecode/slate';\n\nimport { jsx } from 'slate-hyperscript';\n\nimport type { SlateEditor } from '../../../editor';\n\nimport { deserializeHtmlNodeChildren } from './deserializeHtmlNodeChildren';\n\njsx;\n\n/** Deserialize HTML body element to Fragment. */\nexport const htmlBodyToFragment = (\n  editor: SlateEditor,\n  element: HTMLElement\n): Descendant[] | undefined => {\n  if (element.nodeName === 'BODY') {\n    return jsx(\n      'fragment',\n      {},\n      deserializeHtmlNodeChildren(editor, element)\n    ) as Descendant[];\n  }\n};\n","import type { SlateEditor } from '../../../editor';\nimport type { DeserializeHtmlChildren } from '../types';\n\nimport { isSlateNode } from '../../../static';\nimport { deserializeHtmlNode } from './deserializeHtmlNode';\n\nexport const deserializeHtmlNodeChildren = (\n  editor: SlateEditor,\n  node: ChildNode | HTMLElement,\n  isSlateParent = false\n): DeserializeHtmlChildren[] => {\n  return Array.from(node.childNodes).flatMap((child) => {\n    if (\n      child.nodeType === 1 &&\n      !isSlateNode(child as HTMLElement) &&\n      isSlateParent\n    ) {\n      return deserializeHtmlNodeChildren(\n        editor,\n        child as HTMLElement,\n        isSlateParent\n      );\n    }\n\n    return deserializeHtmlNode(editor)(child);\n  }) as DeserializeHtmlChildren[];\n};\n","/** Deserialize HTML to break line. */\nexport const htmlBrToNewLine = (node: ChildNode | HTMLElement) => {\n  if (node.nodeName === 'BR') {\n    return '\\n';\n  }\n};\n","import type { Descendant } from '@udecode/slate';\n\nimport { jsx } from 'slate-hyperscript';\n\nimport type { SlateEditor } from '../../../editor';\n\nimport { isSlateVoid } from '../../../static';\nimport { deserializeHtmlNodeChildren } from './deserializeHtmlNodeChildren';\nimport { pipeDeserializeHtmlElement } from './pipeDeserializeHtmlElement';\n\n/** Deserialize HTML to Element. */\nexport const htmlElementToElement = (\n  editor: SlateEditor,\n  element: HTMLElement,\n  isSlate = false\n) => {\n  const deserialized = pipeDeserializeHtmlElement(editor, element);\n\n  if (deserialized) {\n    const { node, withoutChildren } = deserialized;\n\n    let descendants =\n      node.children ??\n      (deserializeHtmlNodeChildren(editor, element, isSlate) as Descendant[]);\n\n    if (descendants.length === 0 || withoutChildren || isSlateVoid(element)) {\n      descendants = [{ text: '' }];\n    }\n\n    return jsx('element', node, descendants) as Descendant;\n  }\n};\n","import { type AnyObject, type Nullable, isDefined } from '@udecode/utils';\nimport castArray from 'lodash/castArray.js';\n\nimport type { SlateEditor } from '../../../editor';\nimport type {\n  AnyEditorPlugin,\n  HtmlDeserializer,\n} from '../../../plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../../../plugin';\nimport { isSlateNode } from '../../../static';\nimport { getInjectedPlugins } from '../../../utils/getInjectedPlugins';\nimport { getDataNodeProps } from './getDataNodeProps';\n\n/**\n * Get a deserializer and add default rules for deserializing plate static\n * elements\n */\nconst getDeserializedWithStaticRules = (plugin: AnyEditorPlugin) => {\n  let deserializer = plugin.parsers?.html?.deserializer;\n\n  const rules = deserializer?.rules ?? [];\n\n  // Check if rules already contain slate-xxx className\n  const hasSlateRule = rules.some((rule) =>\n    rule.validClassName?.includes(`slate-${plugin.key}`)\n  );\n\n  const staticRules = hasSlateRule\n    ? rules\n    : [\n        {\n          validClassName: `slate-${plugin.key}`,\n          validNodeName: '*',\n        },\n        ...rules,\n      ];\n\n  if (!deserializer) deserializer = { rules: staticRules };\n\n  deserializer.rules = staticRules;\n\n  return deserializer;\n};\n\n/** Get a deserializer by type, node names, class names and styles. */\nexport const pluginDeserializeHtml = (\n  editor: SlateEditor,\n  plugin: AnyEditorPlugin,\n  {\n    deserializeLeaf,\n    element: el,\n  }: { element: HTMLElement; deserializeLeaf?: boolean }\n): (Nullable<HtmlDeserializer> & { node: AnyObject }) | undefined => {\n  const {\n    node: { isElement: isElementRoot, isLeaf: isLeafRoot },\n  } = plugin;\n\n  const deserializer = getDeserializedWithStaticRules(plugin);\n\n  if (!deserializer) return;\n\n  const {\n    attributeNames,\n    isElement: isElementRule,\n    isLeaf: isLeafRule,\n    query,\n    rules,\n  } = deserializer;\n  let { parse } = deserializer;\n\n  const isElement = isElementRule || isElementRoot;\n  const isLeaf = isLeafRule || isLeafRoot;\n\n  if (!deserializeLeaf && !isElement) {\n    return;\n  }\n  if (deserializeLeaf && !isLeaf) {\n    return;\n  }\n  if (rules) {\n    const isValid = rules.some(\n      ({ validAttribute, validClassName, validNodeName = '*', validStyle }) => {\n        if (validNodeName) {\n          const validNodeNames = castArray<string>(validNodeName);\n\n          // Ignore if el nodeName is not included in rule validNodeNames (except *).\n          if (\n            validNodeNames.length > 0 &&\n            !validNodeNames.includes(el.nodeName) &&\n            validNodeName !== '*'\n          )\n            return false;\n        }\n        // Ignore if the rule className is not in el class list.\n        if (validClassName && !el.classList.contains(validClassName))\n          return false;\n        if (validStyle) {\n          for (const [key, value] of Object.entries(validStyle)) {\n            const values = castArray<string>(value);\n\n            // Ignore if el style value is not included in rule style values (except *)\n            if (!values.includes((el.style as any)[key]) && value !== '*')\n              return;\n            // Ignore if el style value is falsy (for value *)\n            if (value === '*' && !(el.style as any)[key]) return;\n\n            const defaultNodeValue = plugin.inject.nodeProps?.defaultNodeValue;\n\n            // Ignore if the style value = plugin.inject.nodeProps.defaultNodeValue\n            if (\n              defaultNodeValue &&\n              defaultNodeValue === (el.style as any)[key]\n            ) {\n              return false;\n            }\n          }\n        }\n        if (validAttribute) {\n          if (typeof validAttribute === 'string') {\n            if (!el.getAttributeNames().includes(validAttribute)) return false;\n          } else {\n            for (const [attributeName, attributeValue] of Object.entries(\n              validAttribute\n            )) {\n              const attributeValues = castArray<string>(attributeValue);\n              const elAttribute = el.getAttribute(attributeName);\n\n              if (\n                !isDefined(elAttribute) ||\n                !attributeValues.includes(elAttribute)\n              )\n                return false;\n            }\n          }\n        }\n\n        return true;\n      }\n    );\n\n    if (!isValid) return;\n  }\n  if (\n    query &&\n    !query({ ...(getEditorPlugin(editor, plugin) as any), element: el })\n  ) {\n    return;\n  }\n  if (!parse)\n    if (isElement) {\n      parse = ({ type }) => ({ type: type });\n    } else if (isLeaf) {\n      parse = ({ type }) => ({ [type!]: true });\n    } else {\n      return;\n    }\n\n  const parsedNode = (() => {\n    if (isSlateNode(el)) {\n      return {};\n    }\n\n    return (\n      parse({\n        ...(getEditorPlugin(editor, plugin) as any),\n        element: el,\n        node: {},\n      }) ?? {}\n    );\n  })();\n\n  const dataNodeProps = getDataNodeProps({\n    editor,\n    element: el,\n    plugin,\n  });\n\n  let node = {\n    ...parsedNode,\n    ...dataNodeProps,\n  };\n\n  if (Object.keys(node).length === 0) return;\n\n  const injectedPlugins = getInjectedPlugins(editor, plugin);\n\n  injectedPlugins.forEach((injectedPlugin) => {\n    const res = injectedPlugin.parsers?.html?.deserializer?.parse?.({\n      ...(getEditorPlugin(editor, plugin) as any),\n      element: el,\n      node,\n    });\n\n    if (res && !isSlateNode(el)) {\n      node = {\n        ...node,\n        ...res,\n      };\n    }\n  });\n\n  if (attributeNames) {\n    const elementAttributes = {};\n\n    const elementAttributeNames = el.getAttributeNames();\n\n    for (const elementAttributeName of elementAttributeNames) {\n      if (attributeNames.includes(elementAttributeName)) {\n        (elementAttributes as any)[elementAttributeName] =\n          el.getAttribute(elementAttributeName);\n      }\n    }\n\n    if (Object.keys(elementAttributes).length > 0) {\n      node.attributes = elementAttributes;\n    }\n  }\n\n  return { ...deserializer, node };\n};\n","import type { SlateEditor } from '../../../editor';\n\nimport { type AnyEditorPlugin, getEditorPlugin } from '../../../plugin';\nimport { isSlateLeaf, isSlatePluginNode } from '../../../static';\n\nconst getDefaultNodeProps = ({\n  element,\n  type,\n}: {\n  element: HTMLElement;\n  type: string;\n}) => {\n  if (!isSlatePluginNode(element, type) && !isSlateLeaf(element)) return;\n\n  const dataAttributes: Record<string, any> = {};\n\n  // Get all data-slate-* attributes from dataset\n  Object.entries(element.dataset).forEach(([key, value]) => {\n    if (\n      key.startsWith('slate') &&\n      value &&\n      // Ignore slate default attributes\n      !['slateInline', 'slateLeaf', 'slateNode', 'slateVoid'].includes(key)\n    ) {\n      // Remove 'slate' prefix and convert to camelCase\n      const attributeKey = key.slice(5).charAt(0).toLowerCase() + key.slice(6);\n\n      // Parse value if it's a boolean or number string\n\n      if (value === undefined) return;\n\n      let parsedValue: any = value;\n\n      if (value === 'true') parsedValue = true;\n      else if (value === 'false') parsedValue = false;\n      else if (!Number.isNaN(Number(value))) parsedValue = Number(value);\n\n      dataAttributes[attributeKey] = parsedValue;\n    }\n  });\n\n  if (Object.keys(dataAttributes).length > 0) {\n    return dataAttributes;\n  }\n};\n\nexport const getDataNodeProps = ({\n  editor,\n  element,\n  plugin,\n}: {\n  editor: SlateEditor;\n  element: HTMLElement;\n  plugin: AnyEditorPlugin;\n}) => {\n  const toNodeProps = plugin.parsers.html?.deserializer?.toNodeProps;\n\n  const disableDefaultNodeProps =\n    plugin.parsers.html?.deserializer?.disableDefaultNodeProps ?? false;\n\n  const defaultNodeProps = disableDefaultNodeProps\n    ? {}\n    : getDefaultNodeProps({\n        ...(getEditorPlugin(editor, plugin) as any),\n        element,\n      });\n\n  if (!toNodeProps) return defaultNodeProps;\n\n  const customNodeProps =\n    toNodeProps({\n      ...(getEditorPlugin(editor, plugin) as any),\n      element,\n    }) ?? {};\n\n  return {\n    ...defaultNodeProps,\n    ...customNodeProps,\n  };\n};\n","import type { AnyObject, Nullable } from '@udecode/utils';\n\nimport type { SlateEditor } from '../../../editor';\nimport type { HtmlDeserializer } from '../../../plugin/SlatePlugin';\n\nimport { pluginDeserializeHtml } from './pluginDeserializeHtml';\n\nexport const pipeDeserializeHtmlElement = (\n  editor: SlateEditor,\n  element: HTMLElement\n) => {\n  let result: (Nullable<HtmlDeserializer> & { node: AnyObject }) | undefined;\n\n  [...editor.pluginList].reverse().some((plugin) => {\n    result = pluginDeserializeHtml(editor, plugin, { element });\n\n    return !!result;\n  });\n\n  return result;\n};\n","import { type Descendant, ElementApi, TextApi } from '@udecode/slate';\nimport { jsx } from 'slate-hyperscript';\n\nimport type { SlateEditor } from '../../../editor';\n\nimport { mergeDeepToNodes } from '../../../utils';\nimport { deserializeHtmlNodeChildren } from './deserializeHtmlNodeChildren';\nimport { pipeDeserializeHtmlLeaf } from './pipeDeserializeHtmlLeaf';\n\n/**\n * Deserialize HTML to Descendant[] with marks on Text. Build the leaf from the\n * leaf deserializers of each plugin.\n */\nexport const htmlElementToLeaf = (\n  editor: SlateEditor,\n  element: HTMLElement\n) => {\n  const node = pipeDeserializeHtmlLeaf(editor, element);\n\n  return deserializeHtmlNodeChildren(editor, element).reduce(\n    (arr: Descendant[], child) => {\n      if (!child) return arr;\n      if (ElementApi.isElement(child)) {\n        if (Object.keys(node).length > 0) {\n          mergeDeepToNodes({\n            node: child,\n            query: {\n              filter: ([n]) => TextApi.isText(n),\n            },\n            source: node,\n          });\n        }\n\n        arr.push(child);\n      } else {\n        const attributes = { ...node };\n\n        // attributes should not override child attributes\n        if (TextApi.isText(child) && child.text) {\n          Object.keys(attributes).forEach((key) => {\n            if (attributes[key] && child[key]) {\n              attributes[key] = child[key];\n            }\n          });\n        }\n\n        arr.push(jsx('text', attributes, child) as any);\n      }\n\n      return arr;\n    },\n    []\n  ) as Descendant[];\n};\n","import type { AnyObject } from '@udecode/utils';\n\nimport type { SlateEditor } from '../../../editor';\n\nimport { pluginDeserializeHtml } from './pluginDeserializeHtml';\n\nexport const pipeDeserializeHtmlLeaf = (\n  editor: SlateEditor,\n  element: HTMLElement\n) => {\n  let node: AnyObject = {};\n\n  [...editor.pluginList].reverse().forEach((plugin) => {\n    const deserialized = pluginDeserializeHtml(editor, plugin, {\n      deserializeLeaf: true,\n      element,\n    });\n\n    if (!deserialized) return;\n\n    node = { ...node, ...deserialized.node };\n  });\n\n  return node;\n};\n","/** Deserialize HTML text node to text. */\nimport { isHtmlText } from './isHtmlText';\n\nexport const htmlTextNodeToString = (node: ChildNode | HTMLElement) => {\n  if (isHtmlText(node)) {\n    if (node.parentElement?.dataset.platePreventDeserialization) return '';\n\n    return node.textContent || '';\n  }\n};\n","import type { SlateEditor } from '../../../editor';\nimport type { DeserializeHtmlNodeReturnType } from '../types';\n\nimport { isSlateNode } from '../../../static';\nimport { htmlBodyToFragment } from './htmlBodyToFragment';\nimport { htmlBrToNewLine } from './htmlBrToNewLine';\nimport { htmlElementToElement } from './htmlElementToElement';\nimport { htmlElementToLeaf } from './htmlElementToLeaf';\nimport { htmlTextNodeToString } from './htmlTextNodeToString';\nimport { isHtmlElement } from './isHtmlElement';\n\n/** Deserialize HTML element or child node. */\nexport const deserializeHtmlNode =\n  (editor: SlateEditor) =>\n  (node: ChildNode | HTMLElement): DeserializeHtmlNodeReturnType => {\n    const textNode = htmlTextNodeToString(node);\n\n    if (textNode) return textNode;\n    if (!isHtmlElement(node)) return null;\n\n    // break line\n    const breakLine = htmlBrToNewLine(node);\n\n    if (breakLine) return breakLine;\n\n    // body\n    const fragment = htmlBodyToFragment(editor, node as HTMLElement);\n\n    if (fragment) return fragment;\n\n    // element\n    const element = htmlElementToElement(\n      editor,\n      node as HTMLElement,\n      isSlateNode(node as HTMLElement)\n    );\n\n    if (element) return element;\n\n    // leaf\n    return htmlElementToLeaf(editor, node as HTMLElement);\n  };\n","import type { SlateEditor } from '../../../editor';\nimport type { DeserializeHtmlNodeReturnType } from '../types';\n\nimport { deserializeHtmlNode } from './deserializeHtmlNode';\n\n/** Deserialize HTML element to fragment. */\nexport const deserializeHtmlElement = (\n  editor: SlateEditor,\n  element: HTMLElement\n): DeserializeHtmlNodeReturnType => {\n  return deserializeHtmlNode(editor)(element);\n};\n","/** Convert HTML string into HTML element. */\nexport const htmlStringToDOMNode = (rawHtml: string) => {\n  const node = document.createElement('body');\n  node.innerHTML = rawHtml;\n\n  return node;\n};\n","import type { Descendant } from '@udecode/slate';\n\nimport type { SlateEditor } from '../../../editor';\nimport type { WithRequiredKey } from '../../../plugin';\n\nimport { normalizeDescendantsToDocumentFragment } from '../../../utils/normalizeDescendantsToDocumentFragment';\nimport { collapseWhiteSpace } from './collapse-white-space';\nimport { deserializeHtmlElement } from './deserializeHtmlElement';\nimport { htmlStringToDOMNode } from './htmlStringToDOMNode';\n\n/** Deserialize HTML element to a valid document fragment. */\nexport const deserializeHtml = (\n  editor: SlateEditor,\n  {\n    collapseWhiteSpace: shouldCollapseWhiteSpace = true,\n    defaultElementPlugin,\n    element,\n  }: {\n    element: HTMLElement | string;\n    collapseWhiteSpace?: boolean;\n    defaultElementPlugin?: WithRequiredKey;\n  }\n): Descendant[] => {\n  // for serializer\n  if (typeof element === 'string') {\n    element = htmlStringToDOMNode(element);\n  }\n  if (shouldCollapseWhiteSpace) {\n    element = collapseWhiteSpace(element);\n  }\n\n  const fragment = deserializeHtmlElement(editor, element) as Descendant[];\n\n  return normalizeDescendantsToDocumentFragment(editor, {\n    defaultElementPlugin,\n    descendants: fragment,\n  });\n};\n","export const parseHtmlDocument = (html: string) => {\n  return new DOMParser().parseFromString(html, 'text/html');\n};\n","import type { LengthConfig } from '../getCorePlugins';\n\nimport { createTSlatePlugin } from '../../plugin';\n\nexport const LengthPlugin = createTSlatePlugin<LengthConfig>({\n  key: 'length',\n}).overrideEditor(({ editor, getOptions, tf: { apply } }) => ({\n  transforms: {\n    apply(operation) {\n      editor.tf.withoutNormalizing(() => {\n        apply(operation);\n\n        const options = getOptions();\n\n        if (options.maxLength) {\n          const length = editor.api.string([]).length;\n\n          // Make sure to remove overflow of text beyond character limit\n          if (length > options.maxLength) {\n            const overflowLength = length - options.maxLength;\n\n            editor.tf.delete({\n              distance: overflowLength,\n              reverse: true,\n              unit: 'character',\n            });\n          }\n        }\n      });\n    },\n  },\n}));\n","import { type PluginConfig, createSlatePlugin } from '../../plugin';\n\nexport type ParagraphConfig = PluginConfig<'p'>;\n\nexport const BaseParagraphPlugin = createSlatePlugin({\n  key: 'p',\n  node: {\n    isElement: true,\n  },\n  parsers: {\n    html: {\n      deserializer: {\n        rules: [\n          {\n            validNodeName: 'P',\n          },\n        ],\n        query: ({ element }) => element.style.fontFamily !== 'Consolas',\n      },\n    },\n  },\n});\n","import type { Descendant, TRange, Value } from '@udecode/slate';\n\nimport { createSlatePlugin } from '../../plugin';\nimport { BaseParagraphPlugin } from '../paragraph';\n\n/** Opinionated extension of slate default behavior. */\nexport const SlateExtensionPlugin = createSlatePlugin({\n  key: 'slateExtension',\n})\n  .overrideEditor(\n    ({\n      editor,\n      tf: { apply, deleteBackward, deleteForward, deleteFragment },\n    }) => {\n      const resetMarks = () => {\n        if (editor.api.isAt({ start: true })) {\n          editor.tf.removeMarks();\n        }\n      };\n\n      return {\n        api: {\n          create: {\n            block: (node) => ({\n              children: [{ text: '' }],\n              type: editor.getType(BaseParagraphPlugin),\n              ...node,\n            }),\n          },\n        },\n        transforms: {\n          apply(operation) {\n            if (operation.type === 'set_selection') {\n              const { properties } = operation;\n              editor.prevSelection = properties as TRange | null;\n              apply(operation);\n              editor.currentKeyboardEvent = null;\n\n              return;\n            }\n\n            apply(operation);\n          },\n          deleteBackward(unit) {\n            deleteBackward(unit);\n            resetMarks();\n          },\n          deleteForward(unit) {\n            deleteForward(unit);\n            resetMarks();\n          },\n          deleteFragment(options) {\n            deleteFragment(options);\n            resetMarks();\n          },\n        },\n      };\n    }\n  )\n  .extendEditorTransforms(({ editor }) => ({\n    setValue: <V extends Value>(value?: V | string) => {\n      let children: Descendant[] = value as any;\n\n      if (typeof value === 'string') {\n        children = editor.api.html.deserialize({\n          element: value,\n        });\n      } else if (!value || value.length === 0) {\n        children = editor.api.create.value();\n      }\n\n      editor.tf.replaceNodes(children, {\n        at: [],\n        children: true,\n      });\n    },\n  }));\n","import type { SlateEditor } from '../editor';\nimport type { ParserOptions } from '../plugin/BasePlugin';\nimport type { AnyEditorPlugin } from '../plugin/SlatePlugin';\n\nimport { getEditorPlugin } from '../plugin';\n\n/** Is the plugin disabled by another plugin. */\nexport const pipeInsertDataQuery = (\n  editor: SlateEditor,\n  plugins: Partial<AnyEditorPlugin>[],\n  { data, dataTransfer }: ParserOptions\n) =>\n  plugins.every((p) => {\n    const query = p.parser?.query;\n\n    return (\n      !query ||\n      query({\n        ...getEditorPlugin(editor, p as any),\n        data,\n        dataTransfer,\n      })\n    );\n  });\n","import { pipeInsertFragment } from '../../internal/plugin/pipeInsertFragment';\nimport { pipeTransformData } from '../../internal/plugin/pipeTransformData';\nimport { pipeTransformFragment } from '../../internal/plugin/pipeTransformFragment';\nimport { createSlatePlugin, getEditorPlugin } from '../plugin';\nimport { getInjectedPlugins } from '../utils';\nimport { pipeInsertDataQuery } from '../utils/pipeInsertDataQuery';\n\nexport const ParserPlugin = createSlatePlugin({\n  key: 'parser',\n}).overrideEditor(({ editor, tf: { insertData } }) => ({\n  transforms: {\n    insertData(dataTransfer: DataTransfer) {\n      const inserted = [...editor.pluginList].reverse().some((plugin) => {\n        const parser = plugin.parser;\n\n        if (!parser) return false;\n\n        const injectedPlugins = getInjectedPlugins(editor, plugin);\n        const { deserialize, format, mimeTypes } = parser;\n\n        if (!format) return false;\n\n        // Handle both string and string[] formats\n        const formats = Array.isArray(format) ? format : [format];\n        const mimeTypeList =\n          mimeTypes ||\n          formats.map((fmt) => (fmt.includes('/') ? fmt : `text/${fmt}`));\n\n        for (const mimeType of mimeTypeList) {\n          let data = dataTransfer.getData(mimeType);\n\n          if (!data) continue;\n          if (\n            !pipeInsertDataQuery(editor, injectedPlugins, {\n              data,\n              dataTransfer,\n            })\n          ) {\n            continue;\n          }\n\n          data = pipeTransformData(editor, injectedPlugins, {\n            data,\n            dataTransfer,\n          });\n\n          let fragment = deserialize?.({\n            ...getEditorPlugin(editor, plugin),\n            data,\n            dataTransfer,\n          });\n\n          if (!fragment?.length) continue;\n\n          fragment = pipeTransformFragment(editor, injectedPlugins, {\n            data,\n            dataTransfer,\n            fragment,\n          });\n\n          if (fragment.length === 0) continue;\n\n          pipeInsertFragment(editor, injectedPlugins, {\n            data,\n            dataTransfer,\n            fragment,\n          });\n\n          return true;\n        }\n\n        return false;\n      });\n\n      if (inserted) return;\n\n      insertData(dataTransfer);\n    },\n  },\n}));\n","/* eslint-disable perfectionist/sort-imports */\nimport type { AnyPluginConfig, PluginConfig } from '../plugin/BasePlugin';\nimport type { SlatePlugin } from '../plugin/SlatePlugin';\n\nimport { AstPlugin } from './AstPlugin';\nimport { DOMPlugin } from './DOMPlugin';\nimport { HistoryPlugin } from './HistoryPlugin';\nimport { InlineVoidPlugin } from './InlineVoidPlugin';\nimport { ParserPlugin } from './ParserPlugin';\nimport { type DebugErrorType, type LogLevel, DebugPlugin } from './debug';\nimport { HtmlPlugin } from './html';\nimport { LengthPlugin } from './length';\nimport { BaseParagraphPlugin } from './paragraph';\nimport { SlateExtensionPlugin } from './slate-extension';\n\nexport type CorePlugin = ReturnType<typeof getCorePlugins>[number];\n\nexport type GetCorePluginsOptions = {\n  /** Specifies the maximum number of characters allowed in the editor. */\n  maxLength?: number;\n  /** Override the core plugins using the same key. */\n  plugins?: AnyPluginConfig[];\n};\n\nexport const getCorePlugins = ({\n  maxLength,\n  plugins = [],\n}: GetCorePluginsOptions) => {\n  let corePlugins = [\n    DebugPlugin as SlatePlugin<DebugConfig>,\n    SlateExtensionPlugin,\n    DOMPlugin,\n    HistoryPlugin,\n    InlineVoidPlugin,\n    ParserPlugin,\n    maxLength\n      ? LengthPlugin.configure({\n          options: { maxLength },\n        })\n      : LengthPlugin,\n    HtmlPlugin,\n    AstPlugin,\n    BaseParagraphPlugin,\n  ];\n\n  // Create a map for quick lookup of custom plugins\n  const customPluginsMap = new Map(\n    plugins.map((plugin) => [plugin.key, plugin])\n  );\n\n  // Replace core plugins with custom plugins if they exist and remove them from plugins\n  corePlugins = corePlugins.map((corePlugin) => {\n    const customPlugin = customPluginsMap.get(corePlugin.key);\n\n    if (customPlugin) {\n      // Remove the custom plugin from the plugins array\n      const index = plugins.findIndex((p) => p.key === corePlugin.key);\n\n      if (index !== -1) {\n        plugins.splice(index, 1);\n      }\n\n      return customPlugin;\n    }\n\n    return corePlugin as any;\n  });\n\n  return corePlugins;\n};\n\nexport type DebugConfig = PluginConfig<\n  'debug',\n  {\n    isProduction: boolean;\n    logger: Partial<Record<LogLevel, LogFunction>>;\n    logLevel: LogLevel;\n    throwErrors: boolean;\n  },\n  {\n    debug: {\n      error: (\n        message: string | unknown,\n        type?: DebugErrorType,\n        details?: any\n      ) => void;\n      info: (message: string, type?: DebugErrorType, details?: any) => void;\n      log: (message: string, type?: DebugErrorType, details?: any) => void;\n      warn: (message: string, type?: DebugErrorType, details?: any) => void;\n    };\n  }\n>;\n\nexport type LengthConfig = PluginConfig<\n  'length',\n  {\n    maxLength: number;\n  }\n>;\n\ntype LogFunction = (\n  message: string,\n  type?: DebugErrorType,\n  details?: any\n) => void;\n","export type { TStateApi as ZustandStoreApi } from 'zustand-x';\n\nexport { createZustandStore } from 'zustand-x';\n","import type {\n  AnyPluginConfig,\n  InferApi,\n  InferOptions,\n  InferSelectors,\n  InferTransforms,\n  PluginConfig,\n  SlatePlugin,\n} from '../../lib';\nimport type {\n  PlatePlugin,\n  PlatePluginContext,\n  PlatePluginMethods,\n} from './PlatePlugin';\n\ntype PlatePluginConfig<\n  C extends AnyPluginConfig,\n  EO = {},\n  EA = {},\n  ET = {},\n  ES = {},\n> = Omit<\n  Partial<\n    PlatePlugin<\n      PluginConfig<\n        C['key'],\n        EO & InferOptions<C>,\n        EA & InferApi<C>,\n        ET & InferTransforms<C>,\n        ES & InferSelectors<C>\n      >\n    >\n  >,\n  keyof PlatePluginMethods | 'api' | 'node' | 'options' | 'transforms'\n> & {\n  api?: EA & Partial<InferApi<C>>;\n  node?: Partial<PlatePlugin<C>['node']>;\n  options?: EO & Partial<InferOptions<C>>;\n  selectors?: ES & Partial<InferSelectors<C>>;\n  transforms?: ET & Partial<InferTransforms<C>>;\n};\n\nconst methodsToWrap: (keyof SlatePlugin)[] = [\n  'configure',\n  'configurePlugin',\n  'extendEditorApi',\n  'extendSelectors',\n  'extendApi',\n  'extendEditorTransforms',\n  'extendTransforms',\n  'overrideEditor',\n  'extend',\n  'extendPlugin',\n];\n\n/**\n * Extends a SlatePlugin to create a React PlatePlugin.\n *\n * @remarks\n *   This function transforms a SlatePlugin into a React PlatePlugin, allowing for\n *   React-specific functionality to be added.\n * @param basePlugin - The base SlatePlugin to be extended.\n * @param extendConfig - A function or object that provides the extension\n *   configuration. If a function, it receives the plugin context and should\n *   return a partial PlatePlugin. If an object, it should be a partial\n *   PlatePlugin configuration.\n * @returns A new PlatePlugin that combines the base SlatePlugin functionality\n *   with React-specific features defined in the extension configuration.\n */\nexport function toPlatePlugin<\n  C extends AnyPluginConfig,\n  EO = {},\n  EA = {},\n  ET = {},\n  ES = {},\n>(\n  basePlugin: SlatePlugin<C>,\n  extendConfig?:\n    | ((ctx: PlatePluginContext<C>) => PlatePluginConfig<C, EO, EA, ET>)\n    | PlatePluginConfig<C, EO, EA, ET>\n): PlatePlugin<\n  PluginConfig<\n    C['key'],\n    EO & InferOptions<C>,\n    EA & InferApi<C>,\n    ET & InferTransforms<C>,\n    ES & InferSelectors<C>\n  >\n> {\n  const plugin = { ...basePlugin } as unknown as PlatePlugin;\n\n  methodsToWrap.forEach((method) => {\n    const originalMethod = plugin[method];\n\n    (plugin as any)[method] = (...args: any[]) => {\n      const slatePlugin = originalMethod(...args);\n\n      return toPlatePlugin(slatePlugin);\n    };\n  });\n\n  plugin.withComponent = (component) => {\n    return plugin.extend({\n      node: { component },\n      render: { node: component },\n    }) as any;\n  };\n\n  if (!extendConfig) return plugin as any;\n\n  const extendedPlugin = plugin.extend(extendConfig as any);\n\n  return extendedPlugin as any;\n}\n\ntype ExtendPluginConfig<C extends AnyPluginConfig = PluginConfig> = Omit<\n  Partial<\n    PlatePlugin<\n      PluginConfig<\n        C['key'],\n        Partial<InferOptions<C>>,\n        Partial<InferApi<C>>,\n        Partial<InferTransforms<C>>\n      >\n    >\n  >,\n  keyof PlatePluginMethods\n>;\n\n/**\n * Explicitly typed version of {@link toPlatePlugin}.\n *\n * @remarks\n *   This function requires explicit type parameters for both the base plugin\n *   configuration and the extension configuration. Use this when you need\n *   precise control over the plugin's type structure or when type inference\n *   doesn't provide the desired result.\n * @typeParam C - The type of the extension configuration for the PlatePlugin\n *   (required).\n * @typeParam TContext - The type of the base SlatePlugin configuration\n *   (optional).\n */\nexport function toTPlatePlugin<\n  C extends AnyPluginConfig = PluginConfig,\n  TContext extends AnyPluginConfig = AnyPluginConfig,\n>(\n  basePlugin: SlatePlugin<TContext>,\n  extendConfig?:\n    | ((ctx: PlatePluginContext<TContext>) => ExtendPluginConfig<C>)\n    | ExtendPluginConfig<C>\n): PlatePlugin<\n  PluginConfig<\n    C['key'],\n    InferOptions<C>,\n    InferApi<C>,\n    InferTransforms<C>,\n    InferSelectors<C>\n  >\n> {\n  return toPlatePlugin(basePlugin as any, extendConfig as any);\n}\n","import type { Modify } from '@udecode/utils';\n\nimport type { PlateEditor } from '../editor/PlateEditor';\nimport type { PlatePlugin, PlatePluginMethods } from './PlatePlugin';\n\nimport {\n  type AnyPluginConfig,\n  type PluginConfig,\n  createSlatePlugin,\n} from '../../lib';\nimport { toPlatePlugin } from './toPlatePlugin';\n\ntype PlatePluginConfig<\n  K extends string = any,\n  O = {},\n  A = {},\n  T = {},\n  S = {},\n> = Omit<\n  Partial<\n    Modify<\n      PlatePlugin<PluginConfig<K, O, A, T, S>>,\n      {\n        node: Partial<PlatePlugin<PluginConfig<K, O, A, T, S>>['node']>;\n      }\n    >\n  >,\n  keyof PlatePluginMethods | 'optionsStore' | 'useOptionsStore'\n>;\n\ntype TPlatePluginConfig<C extends AnyPluginConfig = PluginConfig> = Omit<\n  Partial<\n    Modify<\n      PlatePlugin<C>,\n      {\n        node: Partial<PlatePlugin<C>['node']>;\n      }\n    >\n  >,\n  keyof PlatePluginMethods | 'optionsStore' | 'useOptionsStore'\n>;\n\nexport const createPlatePlugin = <\n  K extends string = any,\n  O = {},\n  A = {},\n  T = {},\n  S = {},\n>(\n  config:\n    | ((editor: PlateEditor) => PlatePluginConfig<K, O, A, T, S>)\n    | PlatePluginConfig<K, O, A, T, S> = {}\n): PlatePlugin<PluginConfig<K, O, A, T, S>> => {\n  const plugin = createSlatePlugin(config as any);\n\n  return toPlatePlugin(plugin as any) as any;\n};\n\n/**\n * Explicitly typed version of `createPlatePlugin`.\n *\n * @remarks\n *   While `createPlatePlugin` uses type inference, this function requires an\n *   explicit type parameter. Use this when you need precise control over the\n *   plugin's type structure or when type inference doesn't provide the desired\n *   result.\n */\nexport function createTPlatePlugin<C extends AnyPluginConfig = PluginConfig>(\n  config:\n    | ((editor: PlateEditor) => TPlatePluginConfig<C>)\n    | TPlatePluginConfig<C> = {}\n): PlatePlugin<C> {\n  return createPlatePlugin(config as any) as any;\n}\n","import type { PlateEditor } from '../editor';\nimport type {\n  InferConfig,\n  PlatePlugin,\n  PlatePluginContext,\n} from './PlatePlugin';\n\nimport {\n  type AnyPluginConfig,\n  type WithRequiredKey,\n  getEditorPlugin as getBaseEditorPlugin,\n} from '../../lib';\n\nexport function getEditorPlugin<\n  P extends AnyPluginConfig | PlatePlugin<AnyPluginConfig>,\n>(\n  editor: PlateEditor,\n  plugin: WithRequiredKey<P>\n): PlatePluginContext<InferConfig<P> extends never ? P : InferConfig<P>> {\n  return getBaseEditorPlugin(editor, plugin) as any;\n}\n","import type { AnyPluginConfig, PluginConfig, WithRequiredKey } from '../../lib';\nimport type { PlateEditor } from '../editor/PlateEditor';\nimport type { PlatePlugin } from './PlatePlugin';\n\nimport { createPlatePlugin } from './createPlatePlugin';\n\n/** Get editor plugin by key or plugin object. */\nexport function getPlugin<C extends AnyPluginConfig = PluginConfig>(\n  editor: PlateEditor,\n  plugin: WithRequiredKey<C>\n): C extends { node: any } ? C : PlatePlugin<C> {\n  return (\n    (editor.plugins[plugin.key] as any) ??\n    createPlatePlugin({ key: plugin.key })\n  );\n}\n","import type { AnyPlatePlugin, PlatePluginContext } from './PlatePlugin';\n\nexport const omitPluginContext = <T extends PlatePluginContext<AnyPlatePlugin>>(\n  ctx: T\n) => {\n  const {\n    api,\n    editor,\n    getOption,\n    getOptions,\n    plugin,\n    setOption,\n    setOptions,\n    tf,\n    type,\n    ...rest\n  } = ctx;\n\n  return rest;\n};\n","import React, { useEffect } from 'react';\n\nimport { useHotkeys } from '@udecode/react-hotkeys';\nimport { isDefined } from '@udecode/utils';\n\nimport type { Shortcut } from '../plugin';\n\nimport { useEditorRef } from '../stores';\n\nexport function EditorHotkeysEffect({\n  id,\n  editableRef,\n}: {\n  editableRef: React.RefObject<HTMLDivElement | null>;\n  id?: string;\n}) {\n  const editor = useEditorRef(id);\n\n  return (\n    <>\n      {Object.entries(editor.shortcuts).map(([hotkeyString, hotkeyConfig]) => {\n        if (\n          !hotkeyConfig ||\n          !isDefined(hotkeyConfig.keys) ||\n          !hotkeyConfig.handler\n        ) {\n          return null;\n        }\n\n        return (\n          <HotkeyEffect\n            id={id}\n            key={hotkeyString}\n            editableRef={editableRef}\n            hotkeyConfig={hotkeyConfig}\n          />\n        );\n      })}\n    </>\n  );\n}\n\nfunction HotkeyEffect({\n  id,\n  editableRef,\n  hotkeyConfig,\n}: {\n  editableRef: React.RefObject<HTMLDivElement | null>;\n  hotkeyConfig: Shortcut;\n  id?: string;\n}) {\n  const editor = useEditorRef(id);\n  const { keys, handler, ...options } = hotkeyConfig;\n\n  const setHotkeyRef = useHotkeys<HTMLDivElement>(\n    keys!,\n    (event, eventDetails) => {\n      handler!({\n        editor,\n        event,\n        eventDetails,\n      });\n    },\n    {\n      enableOnContentEditable: true,\n      ...options,\n    },\n    []\n  );\n\n  useEffect(() => {\n    if (editableRef.current) {\n      setHotkeyRef(editableRef.current);\n    }\n  }, [setHotkeyRef, editableRef]);\n\n  return null;\n}\n","import type { TElement } from '@udecode/slate';\n\nimport { useAtomStoreValue } from 'jotai-x';\n\nimport { useEditorRef } from '../plate';\nimport { SCOPE_ELEMENT, useElementStore } from './useElementStore';\n\n/**\n * Get the element by plugin key. If no element is found in the context, it will\n * return an empty object.\n */\nexport const useElement = <T extends TElement = TElement>(\n  pluginKey = SCOPE_ELEMENT\n): T => {\n  const editor = useEditorRef();\n  const value = useAtomStoreValue(useElementStore(pluginKey), 'element');\n\n  if (!value) {\n    editor.api.debug.warn(\n      `useElement(${pluginKey}) hook must be used inside the node component's context`,\n      'USE_ELEMENT_CONTEXT'\n    );\n\n    return {} as T;\n  }\n\n  return value as T;\n};\n","import React, { useMemo } from 'react';\n\nimport { atom } from 'jotai';\nimport { useAtomStoreSet, useAtomStoreState, useAtomStoreValue } from 'jotai-x';\n\nimport type { PlateEditor } from '../../editor/PlateEditor';\nimport type { PlateChangeKey, PlateStoreState } from './PlateStore';\n\nimport { createAtomStore } from '../../libs';\nimport { createPlateFallbackEditor } from '../../utils';\nimport {\n  usePlateControllerExists,\n  usePlateControllerStore,\n} from '../plate-controller';\n\nexport type PlateStore = ReturnType<typeof usePlateStore>;\n\nexport const PLATE_SCOPE = 'plate';\n\nexport const GLOBAL_PLATE_SCOPE = Symbol('global-plate');\n\nexport const createPlateStore = <E extends PlateEditor = PlateEditor>({\n  id,\n  containerRef = { current: null },\n  decorate = null,\n  editor,\n  isMounted = false,\n  primary = true,\n  readOnly = null,\n  renderElement = null,\n  renderLeaf = null,\n  scrollRef = { current: null },\n  versionDecorate = 1,\n  versionEditor = 1,\n  versionSelection = 1,\n  versionValue = 1,\n  onChange = null,\n  onSelectionChange = null,\n  onValueChange = null,\n  ...state\n}: Partial<PlateStoreState<E>> = {}) =>\n  createAtomStore(\n    {\n      containerRef,\n      decorate,\n      editor,\n      isMounted,\n      primary,\n      readOnly,\n      renderElement,\n      renderLeaf,\n      scrollRef,\n      versionDecorate,\n      versionEditor,\n      versionSelection,\n      versionValue,\n      onChange,\n      onSelectionChange,\n      onValueChange,\n      ...state,\n    } as PlateStoreState<E>,\n    {\n      name: 'plate',\n      suppressWarnings: true,\n      extend: (atoms) => ({\n        trackedEditor: atom((get) => ({\n          editor: get(atoms.editor),\n          version: get(atoms.versionEditor),\n        })),\n        trackedSelection: atom((get) => ({\n          selection: get(atoms.editor).selection,\n          version: get(atoms.versionSelection),\n        })),\n        trackedValue: atom((get) => ({\n          value: get(atoms.editor).children,\n          version: get(atoms.versionValue),\n        })),\n      }),\n    }\n  );\n\nconst {\n  PlateProvider: PlateStoreProvider,\n  plateStore,\n  usePlateSet: usePlateLocalSet,\n  usePlateState: usePlateLocalState,\n  usePlateStore: usePlateLocalStore,\n  usePlateValue: usePlateLocalValue,\n} = createPlateStore();\n\nexport { plateStore, PlateStoreProvider, usePlateLocalStore };\n\nexport const usePlateStore = (id?: string) => {\n  // Try to fetch the store from a Plate provider\n  const localStore =\n    usePlateLocalStore({ scope: id, warnIfNoStore: false }) ?? null;\n\n  const [localStoreExists] = React.useState(!!localStore.store);\n\n  // If no store was found, try to fetch the store from a PlateController\n  const store = (\n    localStoreExists\n      ? localStore\n      : // eslint-disable-next-line react-hooks/rules-of-hooks\n        usePlateControllerStore(id)\n  ) as typeof localStore;\n\n  /**\n   * If we still have no store, there are two possibilities.\n   *\n   * Case 1: There is neither a Plate nor a PlateController above us in the\n   * tree. In this case, throw an error, since calling the hook will never\n   * work.\n   *\n   * Case 2: There is a PlateController, but it has no active editor. In this\n   * case, return a fallback store until an editor becomes active.\n   */\n  const plateControllerExists = usePlateControllerExists();\n  const fallbackStore = useMemo(createPlateStore, []).usePlateStore();\n\n  if (!store) {\n    if (plateControllerExists) {\n      return fallbackStore;\n    }\n\n    throw new Error(\n      `Plate hooks must be used inside a Plate or PlateController`\n    );\n  }\n  return store;\n};\n\nexport const usePlateSet: typeof usePlateLocalSet = (key, options) => {\n  const store = usePlateStore(\n    typeof options === 'string' ? options : options?.scope\n  );\n\n  return useAtomStoreSet(store, key);\n};\n\nexport const usePlateValue = ((key, options) => {\n  const store = usePlateStore(\n    typeof options === 'string' ? options : options?.scope\n  );\n\n  return useAtomStoreValue(store, key);\n}) as typeof usePlateLocalValue;\n\nexport const usePlateState = ((key, options) => {\n  const store = usePlateStore(\n    typeof options === 'string' ? options : options?.scope\n  );\n\n  return useAtomStoreState(store, key);\n}) as typeof usePlateLocalState;\n\n// ─── Selectors ───────────────────────────────────────────────────────────────\n\n/** Get the closest `Plate` id. */\nexport const useEditorId = (): string =>\n  useAtomStoreValue(usePlateStore(), 'editor').id;\n\nexport const useEditorContainerRef = (id?: string) => {\n  return useAtomStoreValue(usePlateStore(id), 'containerRef');\n};\n\nexport const useEditorScrollRef = (id?: string) => {\n  return useAtomStoreValue(usePlateStore(id), 'scrollRef');\n};\n\n/** Returns the scrollRef if it exists, otherwise returns the containerRef. */\nexport const useScrollRef = (id?: string) => {\n  const scrollRef = useEditorScrollRef(id);\n  const containerRef = useEditorContainerRef(id);\n\n  return scrollRef.current ? scrollRef : containerRef;\n};\n\nexport const useEditorMounted = (id?: string): boolean => {\n  return !!useAtomStoreValue(usePlateStore(id), 'isMounted');\n};\n\n/**\n * Whether the editor is read-only. You can also use `useReadOnly` from\n * `slate-react` in node components.\n */\nexport const useEditorReadOnly = (id?: string): boolean => {\n  return !!useAtomStoreValue(usePlateStore(id), 'readOnly');\n};\n\n/**\n * Get a reference to the editor instance that remains stable across re-renders.\n * The editor object is enhanced with a `store` property that provides access to\n * the Plate store.\n *\n * @example\n *   ```tsx\n *   const editor = useEditorRef();\n *   const readOnly = useAtomStoreValue(editor.store, 'readOnly');\n */\nexport const useEditorRef = <E extends PlateEditor = PlateEditor>(\n  id?: string\n): E & { store: PlateStore } => {\n  const store = usePlateStore(id);\n  const editor: any =\n    (useAtomStoreValue(store, 'editor') as E) ?? createPlateFallbackEditor();\n\n  editor.store = store;\n\n  return editor;\n};\n\n/** Get the editor selection (deeply memoized). */\nexport const useEditorSelection = (id?: string) =>\n  usePlateStore(id).useTrackedSelectionValue().selection;\n\n/** Get editor state which is updated on editor change. */\nexport const useEditorState = <E extends PlateEditor = PlateEditor>(\n  id?: string\n): E => {\n  return usePlateStore(id).useTrackedEditorValue().editor;\n};\n\n/** Version incremented on each editor change. */\nexport const useEditorVersion = (id?: string) => {\n  return useAtomStoreValue(usePlateStore(id), 'versionEditor');\n};\n\n/** Version incremented on selection change. */\nexport const useSelectionVersion = (id?: string) => {\n  return useAtomStoreValue(usePlateStore(id), 'versionSelection');\n};\n\n/** Get the editor value (deeply memoized). */\nexport const useEditorValue = (id?: string) =>\n  usePlateStore(id).useTrackedValueValue().value;\n\n/** Version incremented on value change. */\nexport const useValueVersion = (id?: string) => {\n  return useAtomStoreValue(usePlateStore(id), 'versionValue');\n};\n\n// ─── Actions ─────────────────────────────────────────────────────────────────\n\nexport const useIncrementVersion = (key: PlateChangeKey, id?: string) => {\n  const previousVersionRef = React.useRef(1);\n\n  const store = usePlateStore(id);\n\n  const setVersionDecorate = useAtomStoreSet(store, 'versionDecorate');\n  const setVersionSelection = useAtomStoreSet(store, 'versionSelection');\n  const setVersionValue = useAtomStoreSet(store, 'versionValue');\n  const setVersionEditor = useAtomStoreSet(store, 'versionEditor');\n\n  return React.useCallback(() => {\n    const nextVersion = previousVersionRef.current + 1;\n\n    switch (key) {\n      case 'versionDecorate': {\n        setVersionDecorate(nextVersion);\n\n        break;\n      }\n      case 'versionEditor': {\n        setVersionEditor(nextVersion);\n\n        break;\n      }\n      case 'versionSelection': {\n        setVersionSelection(nextVersion);\n\n        break;\n      }\n      case 'versionValue': {\n        setVersionValue(nextVersion);\n\n        break;\n      }\n    }\n\n    previousVersionRef.current = nextVersion;\n  }, [\n    key,\n    setVersionDecorate,\n    setVersionEditor,\n    setVersionSelection,\n    setVersionValue,\n  ]);\n};\n\nexport const useRedecorate = (id?: string) => {\n  const updateDecorate = useIncrementVersion('versionDecorate', id);\n\n  return React.useCallback(() => {\n    updateDecorate();\n  }, [updateDecorate]);\n};\n","export { atom } from 'jotai';\n\nexport {\n  createAtomStore,\n  useStoreAtomState,\n  useStoreAtomValue,\n  useStoreSetAtom,\n} from 'jotai-x';\n\nexport {\n  useStoreSelect,\n  useStoreState,\n  useStoreValue,\n  useTracked,\n  useTrackedStore,\n} from 'zustand-x';\n","import { type Editor, type Value, createEditor } from '@udecode/slate';\n\nimport type { AnyPlatePlugin } from '../plugin';\nimport type { SlateReactExtensionPlugin } from '../plugins';\nimport type { PlateEditor, TPlateEditor } from './PlateEditor';\n\nimport {\n  type AnyPluginConfig,\n  type BaseWithSlateOptions,\n  type CorePlugin,\n  type InferPlugins,\n  withSlate,\n} from '../../lib';\nimport { getPlateCorePlugins } from './getPlateCorePlugins';\n\nexport type PlateCorePlugin = CorePlugin | typeof SlateReactExtensionPlugin;\n\nexport type WithPlateOptions<\n  V extends Value = Value,\n  P extends AnyPluginConfig = PlateCorePlugin,\n> = BaseWithSlateOptions<P> &\n  Pick<\n    Partial<AnyPlatePlugin>,\n    | 'api'\n    | 'decorate'\n    | 'extendEditor'\n    | 'handlers'\n    | 'inject'\n    | 'normalizeInitialValue'\n    | 'options'\n    | 'override'\n    | 'priority'\n    | 'render'\n    | 'shortcuts'\n    | 'transforms'\n    | 'useHooks'\n  > & {\n    value?: ((editor: PlateEditor) => V) | V | string;\n    rootPlugin?: (plugin: AnyPlatePlugin) => AnyPlatePlugin;\n  };\n\n/**\n * Applies Plate-specific enhancements to an editor instance with ReactPlugin.\n *\n * @see {@link createPlateEditor} for a higher-level React editor creation function.\n * @see {@link usePlateEditor} for a memoized version in React components.\n * @see {@link withSlate} for the non-React version of editor enhancement\n */\nexport const withPlate = <\n  V extends Value = Value,\n  P extends AnyPluginConfig = PlateCorePlugin,\n>(\n  e: Editor,\n  { plugins = [], ...options }: WithPlateOptions<V, P> = {}\n): TPlateEditor<V, InferPlugins<P[]>> => {\n  const editor = withSlate<V, P>(e, {\n    ...options,\n    plugins: [...getPlateCorePlugins(), ...plugins],\n  } as any) as unknown as TPlateEditor<V, InferPlugins<P[]>>;\n\n  return editor;\n};\n\nexport type CreatePlateEditorOptions<\n  V extends Value = Value,\n  P extends AnyPluginConfig = PlateCorePlugin,\n> = WithPlateOptions<V, P> & {\n  /**\n   * Initial editor to be extended with `withPlate`.\n   *\n   * @default createEditor()\n   */\n  editor?: Editor;\n};\n\n/**\n * Creates a fully configured Plate editor with optional customizations.\n *\n * @remarks\n *   This function creates a Plate editor with the following enhancements and\n *   configurations:\n *\n *   1. Editor Initialization:\n *\n *   - Assigns a unique ID to the editor if not already present.\n *   - Extend editor state properties.\n *\n *   2. Plugin System:\n *\n *   - Integrates core plugins and user-provided plugins.\n *   - Creates a root plugin that encapsulates all other plugins.\n *   - Resolves plugins into editor.plugins, editor.pluginList.\n *\n *   3. Content Initialization:\n *\n *   - Sets initial editor content if provided.\n *   - Ensures the editor always has content by using a default factory if empty.\n *\n *   4. Selection Handling:\n *\n *   - Applies initial selection if provided.\n *   - Supports auto-selection at start or end of the document.\n *\n *   5. Normalization:\n *\n *   - Performs initial value normalization.\n *   - Optionally applies full editor normalization.\n *\n *   6. Extensibility:\n *\n *   - Allows for deep customization through plugins and overrides.\n *   - Supports custom editor types and configurations.\n *\n *   The resulting editor is a fully-initialized Plate instance, ready for use\n *   with Plate components and APIs, with all core functionalities and custom\n *   plugins applied.\n * @example\n *   const editor = createPlateEditor({\n *     plugins: [ParagraphPlugin, BoldPlugin],\n *     override: {\n *       components: {\n *         [ParagraphPlugin.key]: CustomParagraphComponent,\n *       },\n *     },\n *   });\n *\n * @template V - The value type.\n * @template P - The plugins type.\n * @see {@link createSlateEditor} for a non-React version of editor creation.\n *  * @see {@link usePlateEditor} for a memoized version, suitable for use in React components.\n *  * @see {@link withPlate} for the underlying function that applies Plate enhancements to an editor.\n *  * @see {@link withSlate} for a non-React version of editor enhancement.\n */\nexport const createPlateEditor = <\n  V extends Value = Value,\n  P extends AnyPluginConfig = PlateCorePlugin,\n>({\n  editor = createEditor(),\n  ...options\n}: CreatePlateEditorOptions<V, P> = {}): TPlateEditor<V, InferPlugins<P[]>> => {\n  return withPlate<V, P>(editor, options);\n};\n","import { isDefined } from '@udecode/utils';\n\nimport { SlateExtensionPlugin } from '../../lib';\nimport { toPlatePlugin } from '../plugin';\n\nexport const SlateReactExtensionPlugin = toPlatePlugin(SlateExtensionPlugin, {\n  handlers: {\n    onKeyDown: ({ editor, event }: any) => {\n      // React 16.x needs this event to be persistented due to it's event pooling implementation.\n      // https://reactjs.org/docs/legacy-event-pooling.html\n      event.persist();\n      editor.currentKeyboardEvent = event;\n    },\n  },\n})\n  .extendEditorApi(({ editor }) => ({\n    redecorate: () => {\n      editor.api.debug.warn(\n        `The method editor.api.redecorate() has not been overridden. ` +\n          `This may cause unexpected behavior. Please ensure that all required editor methods are properly defined.`,\n        'OVERRIDE_MISSING'\n      );\n    },\n  }))\n  .overrideEditor(({ editor, tf: { normalizeNode } }) => ({\n    transforms: {\n      normalizeNode(entry, options) {\n        if (isDefined(entry[0]._memo)) {\n          editor.tf.unsetNodes('_memo', { at: entry[1] });\n\n          return;\n        }\n\n        normalizeNode(entry, options);\n      },\n    },\n  }));\n","import { createZustandStore } from '../../../lib';\n\nexport type EventEditorState = {\n  /** Last editor id that has been blurred. */\n  blur: string | null;\n  /** Editor id that is currently being focused. */\n  focus: string | null;\n  /** Last editor id. */\n  last: string | null;\n};\n\n/** Store where the keys are event names and the values are editor ids. */\nexport const EventEditorStore = createZustandStore(\n  {\n    blur: null,\n    focus: null,\n    last: null,\n  } as EventEditorState,\n  {\n    mutative: true,\n    name: 'event-editor',\n  }\n);\n\nexport const { useValue: useEventEditorValue } = EventEditorStore;\n","import { useEffect } from 'react';\n\nimport type { PlateEditor } from '../../editor/PlateEditor';\n\nexport const FOCUS_EDITOR_EVENT = 'focus-editor-event';\n\nexport const BLUR_EDITOR_EVENT = 'blur-editor-event';\n\nexport const useFocusEditorEvents = ({\n  editorRef,\n  onEditorBlur,\n  onEditorFocus,\n}: {\n  editorRef: PlateEditor | null;\n  onEditorBlur?: () => void;\n  onEditorFocus?: () => void;\n}) => {\n  useEffect(() => {\n    const onFocusEditor = (event: Event) => {\n      const id = (event as any).detail.id;\n\n      if (!!onEditorFocus && editorRef && editorRef.id === id) {\n        onEditorFocus();\n      }\n    };\n    const onBlurEditor = (event: Event) => {\n      const id = (event as any).detail.id;\n\n      if (!!onEditorBlur && editorRef && editorRef.id === id) {\n        onEditorBlur();\n      }\n    };\n\n    document.addEventListener(FOCUS_EDITOR_EVENT, onFocusEditor);\n    document.addEventListener(BLUR_EDITOR_EVENT, onBlurEditor);\n\n    return () => {\n      document.removeEventListener(FOCUS_EDITOR_EVENT, onFocusEditor);\n      document.removeEventListener(BLUR_EDITOR_EVENT, onBlurEditor);\n    };\n  }, [editorRef, onEditorBlur, onEditorFocus]);\n};\n","import { createPlatePlugin } from '../../plugin';\nimport { EventEditorStore } from './EventEditorStore';\nimport { BLUR_EDITOR_EVENT, FOCUS_EDITOR_EVENT } from './useFocusEditorEvents';\n\nexport const EventEditorPlugin = createPlatePlugin({\n  key: 'eventEditor',\n  handlers: {\n    onBlur: ({ editor }) => {\n      const focus = EventEditorStore.get('focus');\n\n      if (focus === editor.id) {\n        EventEditorStore.set('focus', null);\n      }\n\n      EventEditorStore.set('blur', editor.id);\n\n      document.dispatchEvent(\n        new CustomEvent(BLUR_EDITOR_EVENT, {\n          detail: { id: editor.id },\n        })\n      );\n    },\n    onFocus: ({ editor }) => {\n      EventEditorStore.set('focus', editor.id);\n\n      document.dispatchEvent(\n        new CustomEvent(FOCUS_EDITOR_EVENT, {\n          detail: { id: editor.id },\n        })\n      );\n    },\n  },\n});\n","import { EventEditorStore } from './EventEditorStore';\n\nexport const getEventPlateId = (id?: string) => {\n  if (id) return id;\n\n  const focus = EventEditorStore.get('focus');\n\n  if (focus) return focus;\n\n  const blur = EventEditorStore.get('blur');\n\n  if (blur) return blur;\n\n  return EventEditorStore.get('last') ?? 'plate';\n};\n","import { Key } from '@udecode/react-hotkeys';\n\nimport { BaseParagraphPlugin } from '../../../lib';\nimport { toPlatePlugin } from '../../plugin/toPlatePlugin';\n\nexport const ParagraphPlugin = toPlatePlugin(\n  BaseParagraphPlugin,\n  ({ editor, type }) => ({\n    shortcuts: {\n      toggleParagraph: {\n        keys: [\n          [Key.Mod, Key.Alt, '0'],\n          [Key.Mod, Key.Shift, '0'],\n        ],\n        preventDefault: true,\n        handler: () => {\n          editor.tf.toggleBlock(type);\n        },\n      },\n    },\n  })\n);\n","import type { ExtendEditor } from '../../../lib';\n\nimport { withReact } from '../../slate-react';\n\nexport const withPlateReact: ExtendEditor = ({ editor }) => {\n  return withReact(editor as any);\n};\n","import { createSlatePlugin } from '../../../lib';\nimport { withPlateReact } from './withPlateReact';\n\n/** @see {@link withReact} */\nexport const ReactPlugin = createSlatePlugin({\n  key: 'dom',\n  extendEditor: withPlateReact,\n}).extendEditorTransforms(({ editor }) => {\n  const { reset } = editor.tf;\n\n  return {\n    reset(options) {\n      const isFocused = editor.api.isFocused();\n\n      reset(options);\n\n      if (isFocused) {\n        editor.tf.focus({ edge: 'startEditor' });\n      }\n    },\n  };\n});\n","import { ParagraphPlugin, ReactPlugin } from '../plugins';\nimport { EventEditorPlugin } from '../plugins/event-editor/EventEditorPlugin';\nimport { SlateReactExtensionPlugin } from '../plugins/SlateReactExtensionPlugin';\n\nexport const getPlateCorePlugins = () => [\n  SlateReactExtensionPlugin,\n  ReactPlugin,\n  EventEditorPlugin,\n  ParagraphPlugin,\n];\n","import type { LegacyEditorMethods } from '@udecode/slate';\n\nimport {\n  type CreatePlateEditorOptions,\n  createPlateEditor,\n} from '../editor/withPlate';\n\nexport const createPlateFallbackEditor = (\n  options: CreatePlateEditorOptions = {}\n) => {\n  const editor = createPlateEditor(options);\n\n  editor.isFallback = true;\n\n  (editor as typeof editor & LegacyEditorMethods).apply = () => {\n    throw new Error(\n      'Cannot apply operations on the fallback editor. The fallback editor is used when a hook that depends on the Plate store was unable to locate a valid store. If you are using PlateController, use `useEditorMounted(id?: string)` or `!editor.isFallback` to ensure that a valid Plate store is available before attempting to call operations on the editor.'\n    );\n  };\n\n  return editor;\n};\n","import type { DOMHandlers } from '../plugin/DOMHandlers';\n\nexport const DOM_HANDLERS: (keyof DOMHandlers)[] = [\n  // Clipboard Events\n  'onCopy',\n  'onCopyCapture',\n  'onCut',\n  'onCutCapture',\n  'onPaste',\n  'onPasteCapture',\n\n  // Composition Events\n  'onCompositionEnd',\n  'onCompositionEndCapture',\n  'onCompositionStart',\n  'onCompositionStartCapture',\n  'onCompositionUpdate',\n  'onCompositionUpdateCapture',\n\n  // Focus Events\n  'onFocus',\n  'onFocusCapture',\n  'onBlur',\n  'onBlurCapture',\n\n  // Form Events\n  'onDOMBeforeInput',\n  'onBeforeInput',\n  'onBeforeInputCapture',\n  'onInput',\n  'onInputCapture',\n  'onReset',\n  'onResetCapture',\n  'onSubmit',\n  'onSubmitCapture',\n  'onInvalid',\n  'onInvalidCapture',\n\n  // Image Events\n  'onLoad',\n  'onLoadCapture',\n\n  // Keyboard Events\n  'onKeyDown',\n  'onKeyDownCapture',\n  'onKeyPress',\n  'onKeyPressCapture',\n  'onKeyUp',\n  'onKeyUpCapture',\n\n  // Media Events\n  'onAbort',\n  'onAbortCapture',\n  'onCanPlay',\n  'onCanPlayCapture',\n  'onCanPlayThrough',\n  'onCanPlayThroughCapture',\n  'onDurationChange',\n  'onDurationChangeCapture',\n  'onEmptied',\n  'onEmptiedCapture',\n  'onEncrypted',\n  'onEncryptedCapture',\n  'onEnded',\n  'onEndedCapture',\n  'onLoadedData',\n  'onLoadedDataCapture',\n  'onLoadedMetadata',\n  'onLoadedMetadataCapture',\n  'onLoadStart',\n  'onLoadStartCapture',\n  'onPause',\n  'onPauseCapture',\n  'onPlay',\n  'onPlayCapture',\n  'onPlaying',\n  'onPlayingCapture',\n  'onProgress',\n  'onProgressCapture',\n  'onRateChange',\n  'onRateChangeCapture',\n  'onSeeked',\n  'onSeekedCapture',\n  'onSeeking',\n  'onSeekingCapture',\n  'onStalled',\n  'onStalledCapture',\n  'onSuspend',\n  'onSuspendCapture',\n  'onTimeUpdate',\n  'onTimeUpdateCapture',\n  'onVolumeChange',\n  'onVolumeChangeCapture',\n  'onWaiting',\n  'onWaitingCapture',\n\n  // MouseEvents\n  'onAuxClick',\n  'onAuxClickCapture',\n  'onClick',\n  'onClickCapture',\n  'onContextMenu',\n  'onContextMenuCapture',\n  'onDoubleClick',\n  'onDoubleClickCapture',\n  'onDrag',\n  'onDragCapture',\n  'onDragEnd',\n  'onDragEndCapture',\n  'onDragEnter',\n  'onDragEnterCapture',\n  'onDragExit',\n  'onDragExitCapture',\n  'onDragLeave',\n  'onDragLeaveCapture',\n  'onDragOver',\n  'onDragOverCapture',\n  'onDragStart',\n  'onDragStartCapture',\n  'onDrop',\n  'onDropCapture',\n  'onMouseDown',\n  'onMouseDownCapture',\n  'onMouseEnter',\n  'onMouseLeave',\n  'onMouseMove',\n  'onMouseMoveCapture',\n  'onMouseOut',\n  'onMouseOutCapture',\n  'onMouseOver',\n  'onMouseOverCapture',\n  'onMouseUp',\n  'onMouseUpCapture',\n\n  // Selection Events\n  'onSelect',\n  'onSelectCapture',\n\n  // Touch Events\n  'onTouchCancel',\n  'onTouchCancelCapture',\n  'onTouchEnd',\n  'onTouchEndCapture',\n  'onTouchMove',\n  'onTouchMoveCapture',\n  'onTouchStart',\n  'onTouchStartCapture',\n\n  // Pointer Events\n  'onPointerDown',\n  'onPointerDownCapture',\n  'onPointerMove',\n  'onPointerUp',\n  'onPointerUpCapture',\n  'onPointerCancel',\n  'onPointerCancelCapture',\n  'onPointerEnter',\n  'onPointerLeave',\n  'onPointerOver',\n  'onPointerOverCapture',\n  'onPointerOut',\n  'onPointerOutCapture',\n  'onGotPointerCapture',\n  'onGotPointerCaptureCapture',\n  'onLostPointerCapture',\n  'onLostPointerCaptureCapture',\n\n  // UI Events\n  'onScroll',\n  'onScrollCapture',\n\n  // Wheel Events\n  'onWheel',\n  'onWheelCapture',\n\n  // Animation Events\n  'onAnimationStart',\n  'onAnimationStartCapture',\n  'onAnimationEnd',\n  'onAnimationEndCapture',\n  'onAnimationIteration',\n  'onAnimationIterationCapture',\n\n  // Transition Events\n  'onTransitionEnd',\n  'onTransitionEndCapture',\n];\n","import type { AnyObject } from '@udecode/utils';\n\nimport { clsx } from 'clsx';\n\nimport type { PlateEditor } from '../editor';\nimport type { AnyEditorPlatePlugin } from '../plugin/PlatePlugin';\nimport type { PlateRenderNodeProps } from '../plugin/PlateRenderNodeProps';\n\nimport { pipeInjectNodeProps } from '../../internal/plugin/pipeInjectNodeProps';\nimport { getSlateClass } from '../../lib';\nimport { getPluginNodeProps } from '../../lib/utils/getPluginNodeProps';\nimport { getEditorPlugin } from '../plugin';\n\n/**\n * Override node props with plugin props. Allowed properties in\n * `props.element.attributes` are passed as `nodeProps`. Extend the class name\n * with the node type.\n */\nexport const getRenderNodeProps = ({\n  attributes,\n  editor,\n  plugin,\n  props,\n}: {\n  editor: PlateEditor;\n  props: PlateRenderNodeProps;\n  attributes?: AnyObject;\n  plugin?: AnyEditorPlatePlugin;\n}): PlateRenderNodeProps => {\n  let nodeProps = {\n    ...props,\n    ...(plugin ? (getEditorPlugin(editor, plugin) as any) : {}),\n  };\n\n  const { className } = props;\n\n  nodeProps = {\n    ...getPluginNodeProps({\n      attributes,\n      plugin: plugin as any,\n      props: nodeProps as any,\n    }),\n    className: clsx(getSlateClass(plugin?.node.type), className),\n  };\n\n  nodeProps = pipeInjectNodeProps(\n    editor,\n    nodeProps,\n    (node) => editor.api.findPath(node)!\n  ) as PlateRenderNodeProps;\n\n  if (nodeProps.style && Object.keys(nodeProps.style).length === 0) {\n    delete nodeProps.style;\n  }\n\n  return nodeProps;\n};\n","import type React from 'react';\n\nimport type { EditableProps } from '../../lib';\nimport type { PlateEditor } from '../editor/PlateEditor';\nimport type { DOMHandlers } from '../plugin/DOMHandlers';\n\nimport { getEditorPlugin } from '../plugin/getEditorPlugin';\n\nexport const convertDomEventToSyntheticEvent = (\n  domEvent: Event\n): React.SyntheticEvent<unknown, unknown> => {\n  let propagationStopped = false;\n\n  return {\n    ...domEvent,\n    bubbles: domEvent.bubbles,\n    cancelable: domEvent.cancelable,\n    currentTarget: domEvent.currentTarget!,\n    defaultPrevented: domEvent.defaultPrevented,\n    eventPhase: domEvent.eventPhase,\n    isTrusted: domEvent.isTrusted,\n    nativeEvent: domEvent,\n    target: domEvent.target!,\n    timeStamp: domEvent.timeStamp,\n    type: domEvent.type,\n    isDefaultPrevented: () => domEvent.defaultPrevented,\n    isPropagationStopped: () => propagationStopped,\n    persist: () => {\n      throw new Error(\n        'persist is not implemented for synthetic events created using convertDomEventToSyntheticEvent'\n      );\n    },\n    preventDefault: () => domEvent.preventDefault(),\n    stopPropagation: () => {\n      propagationStopped = true;\n      domEvent.stopPropagation();\n    },\n  };\n};\n\n/** Check if an event is overrided by a handler. */\nexport const isEventHandled = <\n  EventType extends React.SyntheticEvent<unknown, unknown>,\n>(\n  event: EventType,\n  handler?: (event: EventType) => boolean | void\n) => {\n  if (!handler) {\n    return false;\n  }\n\n  // The custom event handler may return a boolean to specify whether the event\n  // shall be treated as being handled or not.\n  const shouldTreatEventAsHandled = handler(event);\n\n  if (shouldTreatEventAsHandled != null) {\n    return shouldTreatEventAsHandled;\n  }\n\n  return event.isPropagationStopped();\n};\n\n/**\n * Generic pipe for handlers.\n *\n * - Get all the plugins handlers by `handlerKey`.\n * - If there is no plugin handler or editable prop handler for this key, return\n *   `undefined`.\n * - Return a handler calling all the plugins handlers then the prop handler.\n * - Any handler returning true will stop the next handlers to be called,\n *   including slate internal handler.\n */\nexport const pipeHandler = <K extends keyof DOMHandlers>(\n  editor: PlateEditor,\n  {\n    editableProps,\n    handlerKey,\n  }: { handlerKey: K; editableProps?: Omit<EditableProps, 'decorate'> | null }\n): ((event: any) => void) | undefined => {\n  const propsHandler = editableProps?.[handlerKey] as (\n    event: any\n  ) => boolean | void;\n\n  const relevantPlugins = editor.pluginList.filter(\n    (plugin) => plugin.handlers?.[handlerKey]\n  );\n\n  if (relevantPlugins.length === 0 && !propsHandler) return;\n\n  return (event: any) => {\n    const isDomEvent = event instanceof Event;\n    const handledEvent = isDomEvent\n      ? convertDomEventToSyntheticEvent(event)\n      : event;\n\n    const eventIsHandled = relevantPlugins.some((plugin) => {\n      const pluginHandler = plugin.handlers[handlerKey]!;\n\n      const shouldTreatEventAsHandled = pluginHandler({\n        ...(getEditorPlugin(editor, plugin) as any),\n        event: handledEvent,\n      });\n\n      if (shouldTreatEventAsHandled != null) {\n        return shouldTreatEventAsHandled;\n      }\n\n      return false;\n    });\n\n    if (eventIsHandled) return true;\n\n    return isEventHandled(handledEvent, propsHandler);\n  };\n};\n","import type { Value } from '@udecode/slate';\n\nimport type { PlateEditor } from '../editor/PlateEditor';\n\nimport { getEditorPlugin } from '../plugin/getEditorPlugin';\n\nexport const pipeOnChange = (editor: PlateEditor, value: Value) => {\n  return editor.pluginList.some((plugin) => {\n    const handler = plugin.handlers.onChange;\n\n    if (!handler) {\n      return false;\n    }\n\n    // The custom event handler may return a boolean to specify whether the event\n    // shall be treated as being handled or not.\n    const shouldTreatEventAsHandled = handler({\n      ...(getEditorPlugin(editor, plugin) as any),\n      value,\n    });\n\n    if (shouldTreatEventAsHandled != null) {\n      return shouldTreatEventAsHandled;\n    }\n\n    return false;\n  });\n};\n","import React from 'react';\n\nimport type { EditableProps } from '../../lib';\nimport type { PlateEditor } from '../editor/PlateEditor';\n\nimport { useNodePath } from '../hooks';\nimport { DefaultElement } from '../slate-react';\nimport { type RenderElement, pluginRenderElement } from './pluginRenderElement';\n\n/** @see {@link RenderElement} */\nexport const pipeRenderElement = (\n  editor: PlateEditor,\n  renderElementProp?: EditableProps['renderElement']\n): EditableProps['renderElement'] => {\n  const renderElements: RenderElement[] = [];\n\n  editor.pluginList.forEach((plugin) => {\n    if (plugin.node.isElement) {\n      renderElements.push(pluginRenderElement(editor, plugin));\n    }\n  });\n\n  return function render(props) {\n    let element;\n\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    const path = useNodePath(props.element)!;\n\n    renderElements.some((renderElement) => {\n      element = renderElement({ ...props, path } as any);\n\n      return !!element;\n    });\n\n    if (element) return element;\n    if (renderElementProp) {\n      return renderElementProp({ ...props, path } as any);\n    }\n\n    return (\n      <DefaultElement attributes={props.attributes} element={props.element}>\n        {props.children}\n      </DefaultElement>\n    );\n  };\n};\n","import React from 'react';\n\nimport clsx from 'clsx';\nimport { useAtomStoreValue } from 'jotai-x';\nimport omit from 'lodash/omit.js';\nimport { useDeepCompareMemo } from 'use-deep-compare';\n\nimport type { EditableProps } from '../../lib';\nimport type { PlateProps } from '../components';\n\nimport { pipeDecorate } from '../../lib/static/utils/pipeDecorate';\nimport { useEditorRef, usePlateStore } from '../stores';\nimport { DOM_HANDLERS } from '../utils/dom-attributes';\nimport { pipeHandler } from '../utils/pipeHandler';\nimport { pipeRenderElement } from '../utils/pipeRenderElement';\nimport { pipeRenderLeaf } from '../utils/pipeRenderLeaf';\n\nexport const useEditableProps = ({\n  disabled,\n  readOnly: readOnlyProp,\n  ...editableProps\n}: Omit<EditableProps, 'decorate'> &\n  Pick<PlateProps, 'decorate'> = {}): EditableProps => {\n  const { id } = editableProps;\n\n  const editor = useEditorRef(id);\n  const store = usePlateStore(id);\n  const versionDecorate = useAtomStoreValue(store, 'versionDecorate');\n  const storeReadOnly = useAtomStoreValue(store, 'readOnly');\n  const storeDecorate = useAtomStoreValue(store, 'decorate');\n  const storeRenderLeaf = useAtomStoreValue(store, 'renderLeaf');\n  const storeRenderElement = useAtomStoreValue(store, 'renderElement');\n\n  const decorateMemo = React.useMemo(() => {\n    return pipeDecorate(\n      editor,\n      storeDecorate ?? (editableProps?.decorate as any)\n    );\n  }, [editableProps?.decorate, editor, storeDecorate]);\n\n  const decorate: typeof decorateMemo = React.useMemo(() => {\n    if (!versionDecorate || !decorateMemo) return;\n\n    return (entry) => decorateMemo(entry);\n  }, [decorateMemo, versionDecorate]);\n\n  const renderElement = React.useMemo(() => {\n    return pipeRenderElement(\n      editor,\n      storeRenderElement ?? editableProps?.renderElement\n    );\n  }, [editableProps?.renderElement, editor, storeRenderElement]);\n\n  const renderLeaf = React.useMemo(() => {\n    return pipeRenderLeaf(editor, storeRenderLeaf ?? editableProps?.renderLeaf);\n  }, [editableProps?.renderLeaf, editor, storeRenderLeaf]);\n\n  const props: EditableProps = useDeepCompareMemo(() => {\n    const _props: EditableProps = {\n      decorate,\n      renderElement,\n      renderLeaf,\n    };\n\n    DOM_HANDLERS.forEach((handlerKey) => {\n      const handler = pipeHandler(editor, {\n        editableProps,\n        handlerKey,\n      }) as any;\n\n      if (handler) {\n        _props[handlerKey] = handler;\n      }\n    });\n\n    return _props;\n  }, [decorate, editableProps, renderElement, renderLeaf]);\n\n  const readOnly = storeReadOnly || readOnlyProp || disabled;\n\n  return useDeepCompareMemo(\n    () => ({\n      ...omit(editableProps, [\n        ...DOM_HANDLERS,\n        'renderElement',\n        'renderLeaf',\n        'decorate',\n      ]),\n      ...props,\n      'aria-disabled': disabled,\n      className: clsx(\n        'slate-editor',\n        'ignore-click-outside/toolbar',\n        editableProps.className\n      ),\n      'data-readonly': readOnly,\n      readOnly,\n    }),\n    [editableProps, props, readOnly]\n  );\n};\n","import React from 'react';\n\nimport type { EditableProps } from '../../lib';\nimport type { PlateEditor } from '../editor/PlateEditor';\n\nimport { DefaultLeaf } from '../components';\nimport { getRenderNodeProps } from './getRenderNodeProps';\nimport { type RenderLeaf, pluginRenderLeaf } from './pluginRenderLeaf';\n\n/** @see {@link RenderLeaf} */\nexport const pipeRenderLeaf = (\n  editor: PlateEditor,\n  renderLeafProp?: EditableProps['renderLeaf']\n): EditableProps['renderLeaf'] => {\n  const renderLeafs: RenderLeaf[] = [];\n\n  editor.pluginList.forEach((plugin) => {\n    if (plugin.node.isLeaf && plugin.key) {\n      renderLeafs.push(pluginRenderLeaf(editor, plugin));\n    }\n  });\n\n  return function render(props) {\n    renderLeafs.forEach((renderLeaf) => {\n      const newChildren = renderLeaf(props as any);\n\n      if (newChildren !== undefined) {\n        props.children = newChildren;\n      }\n    });\n\n    if (renderLeafProp) {\n      return renderLeafProp(props);\n    }\n\n    const ctxProps = getRenderNodeProps({\n      attributes: props.attributes as any,\n      editor,\n      props: props as any,\n    }) as any;\n\n    return <DefaultLeaf {...(ctxProps as any)} />;\n  };\n};\n","import React from 'react';\n\nimport type { PlateEditor } from '../editor/PlateEditor';\nimport type { AnyEditorPlatePlugin } from '../plugin/PlatePlugin';\nimport type { PlateRenderLeafProps } from '../plugin/PlateRenderLeafProps';\n\nimport { DefaultLeaf } from '../components/DefaultLeaf';\nimport { getRenderNodeProps } from './getRenderNodeProps';\n\nexport type RenderLeaf = (\n  props: PlateRenderLeafProps\n) => React.ReactElement<any>;\n\n/**\n * Get a `Editable.renderLeaf` handler for `plugin.node.type`. If the type is\n * equals to the slate leaf type, render `plugin.render.node`. Else, return\n * `children`.\n */\nexport const pluginRenderLeaf = (\n  editor: PlateEditor,\n  plugin: AnyEditorPlatePlugin\n): RenderLeaf =>\n  function render(nodeProps) {\n    const {\n      render: { node },\n    } = plugin;\n    const { children, leaf } = nodeProps;\n\n    if (leaf[plugin.node.type ?? plugin.key]) {\n      const Leaf = node ?? DefaultLeaf;\n\n      const ctxProps = getRenderNodeProps({\n        attributes: leaf.attributes as any,\n        editor,\n        plugin,\n        props: nodeProps as any,\n      }) as any;\n\n      return <Leaf {...ctxProps}>{children}</Leaf>;\n    }\n\n    return children;\n  };\n","import { useMemoizedSelector } from '@udecode/react-utils';\nimport { type TNode, PathApi } from '@udecode/slate';\n\nimport { useEditorRef } from '../stores';\n\nexport const useNodePath = (node: TNode) => {\n  const editor = useEditorRef();\n\n  return useMemoizedSelector(\n    () => {\n      return editor.api.findPath(node);\n    },\n    [editor, node],\n    (a, b) => {\n      return !!a && !!b && PathApi.equals(a, b);\n    }\n  );\n};\n","import React from 'react';\n\nimport type { Editor, TSelection, Value } from '@udecode/slate';\nimport type { UnknownObject } from '@udecode/utils';\n\nimport { useAtomStoreValue } from 'jotai-x';\n\nimport { useEditorRef, useIncrementVersion, usePlateStore } from '../stores';\nimport { pipeOnChange } from '../utils/pipeOnChange';\n\ninterface SlateProps extends UnknownObject {\n  children: React.ReactNode;\n  editor: Editor;\n  initialValue: Value;\n  onChange?: (value: Value) => void;\n  onSelectionChange?: (selection: TSelection) => void;\n  onValueChange?: (value: Value) => void;\n}\n\n/** Get Slate props stored in a global store. */\nexport const useSlateProps = ({\n  id,\n}: {\n  id?: string;\n}): Omit<SlateProps, 'children'> => {\n  const editor = useEditorRef(id);\n  const store = usePlateStore(id);\n  const onChangeProp = useAtomStoreValue(store, 'onChange');\n  const onValueChangeProp = useAtomStoreValue(store, 'onValueChange');\n  const onSelectionChangeProp = useAtomStoreValue(store, 'onSelectionChange');\n  const updateVersionEditor = useIncrementVersion('versionEditor', id);\n  const updateVersionSelection = useIncrementVersion('versionSelection', id);\n  const updateVersionValue = useIncrementVersion('versionValue', id);\n\n  const onChange = React.useCallback(\n    (newValue: Value) => {\n      updateVersionEditor();\n      const eventIsHandled = pipeOnChange(editor, newValue);\n\n      if (!eventIsHandled) {\n        onChangeProp?.({ editor, value: newValue });\n      }\n    },\n    [editor, onChangeProp, updateVersionEditor]\n  );\n\n  const onValueChange: SlateProps['onValueChange'] = React.useMemo(\n    () => (value) => {\n      updateVersionValue();\n      onValueChangeProp?.({ editor, value });\n    },\n    [editor, onValueChangeProp, updateVersionValue]\n  );\n\n  const onSelectionChange: SlateProps['onSelectionChange'] = React.useMemo(\n    () => (selection: TSelection) => {\n      updateVersionSelection();\n      onSelectionChangeProp?.({ editor, selection });\n    },\n    [editor, onSelectionChangeProp, updateVersionSelection]\n  );\n\n  return React.useMemo(() => {\n    return {\n      key: editor.key,\n      editor,\n      initialValue: editor.children,\n      value: editor.children,\n      onChange,\n      onSelectionChange,\n      onValueChange,\n    };\n  }, [editor, onChange, onSelectionChange, onValueChange]);\n};\n","import React from 'react';\n\nimport type { PlateEditor } from '../editor/PlateEditor';\nimport type { AnyEditorPlatePlugin } from '../plugin/PlatePlugin';\nimport type { PlateRenderElementProps } from '../plugin/PlateRenderElementProps';\n\nimport { DefaultElement } from '../slate-react';\nimport { useElement } from '../stores';\nimport { ElementProvider } from '../stores/element/useElementStore';\nimport { getRenderNodeProps } from './getRenderNodeProps';\n\n/**\n * Function used to render an element. If the function returns undefined then\n * the next RenderElement function is called. If the function renders a JSX\n * element then that JSX element is rendered.\n */\nexport type RenderElement = (\n  props: PlateRenderElementProps\n) => React.ReactElement<any> | undefined;\n\nfunction ElementContent({\n  editor,\n  nodeProps,\n  plugin,\n}: {\n  editor: PlateEditor;\n  nodeProps: PlateRenderElementProps;\n  plugin: AnyEditorPlatePlugin;\n}) {\n  const element = useElement();\n\n  const { children: _children } = nodeProps;\n  const key = plugin.key;\n  const Element = plugin.render?.node ?? (DefaultElement as any);\n\n  const aboveNodes = editor.pluginList.flatMap(\n    (o) => o.render?.aboveNodes ?? []\n  );\n  const belowNodes = editor.pluginList.flatMap(\n    (o) => o.render?.belowNodes ?? []\n  );\n\n  nodeProps = getRenderNodeProps({\n    attributes: element.attributes as any,\n    editor,\n    plugin,\n    props: nodeProps as any,\n  }) as any;\n\n  let children = _children;\n\n  belowNodes.forEach((withHOC) => {\n    const hoc = withHOC({ ...nodeProps, key } as any);\n\n    if (hoc) {\n      children = hoc({ ...nodeProps, children } as any);\n    }\n  });\n\n  let component: React.ReactNode = <Element {...nodeProps}>{children}</Element>;\n\n  aboveNodes.forEach((withHOC) => {\n    const hoc = withHOC({ ...nodeProps, key } as any);\n\n    if (hoc) {\n      component = hoc({ ...nodeProps, children: component } as any);\n    }\n  });\n\n  return component;\n}\n\n/**\n * Get a `Editable.renderElement` handler for `plugin.node.type`. If the type is\n * equals to the slate element type, render `plugin.render.node`. Else, return\n * `undefined` so the pipeline can check the next plugin.\n */\nexport const pluginRenderElement = (\n  editor: PlateEditor,\n  plugin: AnyEditorPlatePlugin\n): RenderElement =>\n  function render(nodeProps) {\n    const { element, path } = nodeProps;\n\n    if (element.type === plugin.node.type) {\n      return (\n        <ElementProvider\n          element={element}\n          entry={[element, path]}\n          path={path}\n          scope={plugin.key}\n        >\n          <ElementContent\n            editor={editor}\n            nodeProps={nodeProps}\n            plugin={plugin}\n          />\n        </ElementProvider>\n      );\n    }\n  };\n","import type { ElementEntry, Path, TElement } from '@udecode/slate';\nimport type { Nullable } from '@udecode/utils';\n\nimport { createAtomStore } from '../../libs/jotai';\n\nexport const SCOPE_ELEMENT = 'element';\n\nexport type ElementStoreState = {\n  element: TElement;\n  entry: ElementEntry;\n  path: Path;\n};\n\nconst initialState: Nullable<ElementStoreState> = {\n  element: null,\n  entry: null,\n  path: null,\n};\n\nexport const { ElementProvider, elementStore, useElementStore } =\n  createAtomStore(\n    initialState as ElementStoreState,\n    { name: 'element', suppressWarnings: true } as const\n  );\n","import React from 'react';\n\nimport type { JotaiStore } from 'jotai-x';\n\nimport { type Atom, atom } from 'jotai';\n\nimport { createAtomStore, useStoreAtomValue } from '../../libs';\n\nconst {\n  PlateControllerProvider: PlateController,\n  plateControllerStore,\n  usePlateControllerStore: _usePlateControllerStore,\n} = createAtomStore(\n  {\n    activeId: atom<string | null>(null),\n    editorStores: atom<Record<string, JotaiStore | null>>({}),\n    primaryEditorIds: atom<string[]>([]),\n  },\n  {\n    name: 'plateController',\n  }\n);\n\nexport { PlateController, plateControllerStore };\n\nexport const usePlateControllerLocalStore: typeof _usePlateControllerStore = (\n  options\n) =>\n  _usePlateControllerStore({\n    scope: typeof options === 'string' ? options : undefined,\n    warnIfNoStore: false,\n    ...(typeof options === 'object' ? options : {}),\n  });\n\n// export const usePlateControllerStore = (options?: UsePlateControllerStoreOptions) =>\n//   _usePlateControllerStore(options);\n\nexport const usePlateControllerExists = () =>\n  !!usePlateControllerLocalStore().store;\n\n/**\n * Retrieve from PlateController the JotaiStore for the editor with a given ID,\n * or the active editor if no ID is provided, or the first primary editor if no\n * editor is active, or null.\n */\nexport const usePlateControllerStore = (idProp?: string): JotaiStore | null => {\n  const storeAtom: Atom<JotaiStore | null> = React.useMemo(\n    () =>\n      atom((get) => {\n        const editorStores = get(plateControllerStore.atom.editorStores);\n\n        const forId = (id: string | null): JotaiStore | null => {\n          if (!id) return null;\n\n          return editorStores[id] ?? null;\n        };\n\n        if (idProp) return forId(idProp);\n\n        const lookupOrder = [\n          get(plateControllerStore.atom.activeId),\n          ...get(plateControllerStore.atom.primaryEditorIds),\n        ];\n\n        for (const id of lookupOrder) {\n          const store = forId(id);\n\n          if (store) return store;\n        }\n\n        return null;\n      }),\n    [idProp]\n  );\n\n  return useStoreAtomValue(usePlateControllerLocalStore(), storeAtom);\n};\n","import React from 'react';\n\nimport type { AnyPluginConfig, WithRequiredKey } from '../../../lib';\nimport type { PlateEditor } from '../../editor';\n\nimport {\n  type InferConfig,\n  type PlatePlugin,\n  type PlatePluginContext,\n  getEditorPlugin,\n} from '../../plugin';\nimport { type PlateStore, useEditorRef } from './createPlateStore';\n\n/** Get editor and plugin context. */\nexport function useEditorPlugin<\n  P extends AnyPluginConfig | PlatePlugin<AnyPluginConfig>,\n  E extends PlateEditor = PlateEditor,\n>(\n  p: WithRequiredKey<P>,\n  id?: string\n): PlatePluginContext<InferConfig<P> extends never ? P : InferConfig<P>, E> & {\n  store: PlateStore;\n} {\n  const editor = useEditorRef(id);\n\n  return React.useMemo(\n    () =>\n      ({\n        ...getEditorPlugin(editor, p),\n        store: editor.store,\n      }) as any,\n    [editor, p]\n  );\n}\n","import React from 'react';\n\nimport { useStoreAtomValue } from 'jotai-x';\nimport { selectAtom } from 'jotai/utils';\n\nimport type { PlateEditor } from '../../editor';\n\nimport { plateStore, usePlateStore } from './createPlateStore';\n\nexport interface UseEditorSelectorOptions<T> {\n  id?: string;\n  equalityFn?: (a: T, b: T) => boolean;\n}\n\nexport const useEditorSelector = <T, E extends PlateEditor = PlateEditor>(\n  selector: (editor: E, prev?: T) => T,\n  deps: React.DependencyList,\n  { id, equalityFn = (a: T, b: T) => a === b }: UseEditorSelectorOptions<T> = {}\n): T => {\n  const selectorAtom = React.useMemo(\n    () =>\n      selectAtom<{ editor: E }, T>(\n        plateStore.atom.trackedEditor,\n        ({ editor }, prev) => selector(editor, prev),\n        equalityFn\n      ),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    deps\n  );\n\n  return useStoreAtomValue(usePlateStore(id), selectorAtom);\n};\n","import type { TEqualityChecker } from 'zustand-x';\n\nimport { useStoreSelect, useStoreValue } from 'zustand-x';\n\nimport type {\n  AnyPluginConfig,\n  InferOptions,\n  InferSelectors,\n  WithRequiredKey,\n} from '../../../lib';\nimport type { PlateEditor } from '../../editor';\n\nimport { useEditorRef } from './createPlateStore';\n\n/**\n * Hook to access plugin options. For usage outside `<Plate>`, use\n * `useEditorPluginOption` instead.\n *\n * @example\n *   const value = usePluginOption(plugin, 'value');\n *   const doubleValue = usePluginOption(plugin, 'doubleValue', 2);\n */\nexport function usePluginOption<\n  C extends AnyPluginConfig,\n  StateType extends InferOptions<C>,\n  TSelectors extends InferSelectors<C>,\n  K extends keyof StateType | keyof TSelectors | 'state',\n>(\n  plugin: WithRequiredKey<C>,\n  key: K,\n  ...args: [\n    ...(K extends keyof TSelectors ? Parameters<TSelectors[K]> : unknown[]),\n    TEqualityChecker<\n      K extends 'state'\n        ? StateType\n        : K extends keyof TSelectors\n          ? ReturnType<TSelectors[K]>\n          : K extends keyof StateType\n            ? StateType[K]\n            : never\n    >?,\n  ]\n): K extends 'state'\n  ? StateType\n  : K extends keyof TSelectors\n    ? ReturnType<TSelectors[K]>\n    : K extends keyof StateType\n      ? StateType[K]\n      : never {\n  const editor = useEditorRef();\n\n  return useEditorPluginOption(editor, plugin, key, ...args);\n}\n\nexport function useEditorPluginOption<\n  C extends AnyPluginConfig,\n  StateType extends InferOptions<C>,\n  TSelectors extends InferSelectors<C>,\n  K extends keyof StateType | keyof TSelectors | 'state',\n>(\n  editor: PlateEditor,\n  plugin: WithRequiredKey<C>,\n  key: K,\n  ...args: [\n    ...(K extends keyof TSelectors ? Parameters<TSelectors[K]> : unknown[]),\n    TEqualityChecker<\n      K extends 'state'\n        ? StateType\n        : K extends keyof TSelectors\n          ? ReturnType<TSelectors[K]>\n          : K extends keyof StateType\n            ? StateType[K]\n            : never\n    >?,\n  ]\n): K extends 'state'\n  ? StateType\n  : K extends keyof TSelectors\n    ? ReturnType<TSelectors[K]>\n    : K extends keyof StateType\n      ? StateType[K]\n      : never {\n  const store = editor.getOptionsStore(plugin);\n\n  if (!store) {\n    return undefined as any;\n  }\n\n  if (!(key in store.get('state')) && !(key in store.selectors)) {\n    editor.api.debug.error(\n      `usePluginOption: ${key as any} option is not defined in plugin ${plugin.key}`,\n      'OPTION_UNDEFINED'\n    );\n    return undefined as any;\n  }\n\n  return (useStoreValue as any)(store, key, ...args);\n}\n\n/**\n * Use zustand store selector.\n *\n * @example\n *   const name = usePluginOptions(plugin, (state) => state.name, equalityFn);\n */\nexport function usePluginOptions<C extends AnyPluginConfig, U>(\n  plugin: WithRequiredKey<C>,\n  selector: (state: InferOptions<C>) => U,\n  {\n    id,\n    equalityFn,\n  }: {\n    // Editor id. Default is the closest one.\n    id?: string;\n    // Equality function. Default is strict equality.\n    equalityFn?: (a: U, b: U) => boolean;\n  } = {}\n): U {\n  const editor = useEditorRef(id);\n\n  return useEditorPluginOptions(editor, plugin, selector, {\n    equalityFn,\n  });\n}\n\nexport function useEditorPluginOptions<C extends AnyPluginConfig, U>(\n  editor: PlateEditor,\n  plugin: WithRequiredKey<C>,\n  selector: (state: InferOptions<C>) => U,\n  {\n    equalityFn,\n  }: {\n    // Equality function. Default is strict equality.\n    equalityFn?: (a: U, b: U) => boolean;\n  } = {}\n): U {\n  const store = editor.getOptionsStore(plugin);\n\n  if (!store) {\n    return undefined as any;\n  }\n\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return useStoreSelect(store, selector, equalityFn);\n}\n","import React from 'react';\n\nimport type { NodeEntry, TElement } from '@udecode/slate';\n\nimport { useStoreAtomValue } from 'jotai-x';\nimport { selectAtom } from 'jotai/utils';\n\nimport { elementStore, useElementStore } from './useElementStore';\n\ninterface UseElementSelectorOptions<T> {\n  key?: string;\n  equalityFn?: (a: T, b: T) => boolean;\n}\n\nexport const useElementSelector = <T>(\n  selector: <N extends TElement>(state: NodeEntry<N>, prev?: T) => T,\n  deps: React.DependencyList,\n  {\n    key,\n    equalityFn = (a: T, b: T) => a === b,\n  }: UseElementSelectorOptions<T> = {}\n): T => {\n  const selectorAtom = React.useMemo(\n    () =>\n      selectAtom(\n        elementStore.atom.entry,\n        (entry, prev) => selector(entry, prev),\n        equalityFn\n      ),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    deps\n  );\n\n  return useStoreAtomValue(useElementStore(key), selectorAtom);\n};\n","import type { Path } from '@udecode/slate';\n\nimport { useAtomStoreValue } from 'jotai-x';\n\nimport { useEditorRef } from '../plate';\nimport { useElementStore } from './useElementStore';\n\n/** Get the memoized path of the closest element. */\nexport const usePath = (pluginKey?: string): Path => {\n  const editor = useEditorRef();\n  const value = useAtomStoreValue(useElementStore(pluginKey), 'path');\n\n  if (!value) {\n    editor.api.debug.warn(\n      `usePath(${pluginKey}) hook must be used inside the node component's context`,\n      'USE_ELEMENT_CONTEXT'\n    );\n\n    return undefined as any;\n  }\n\n  return value;\n};\n","import { useEventEditorValue } from '../../plugins/event-editor/EventEditorStore';\nimport { PLATE_SCOPE, useEditorRef } from '../plate';\n\n/** Get last event editor id: focus, blur or last. */\nexport const useEventPlateId = (id?: string) => {\n  const focus = useEventEditorValue('focus');\n  const blur = useEventEditorValue('blur');\n  const last = useEventEditorValue('last');\n  const providerId = useEditorRef().id;\n\n  if (id) return id;\n  if (focus) return focus;\n  if (blur) return blur;\n\n  return last ?? providerId ?? PLATE_SCOPE;\n};\n","import React from 'react';\n\nimport { useEditorRef, useRedecorate } from '../stores';\n\nexport const EditorMethodsEffect = ({ id }: { id?: string }) => {\n  const editor = useEditorRef(id);\n  const redecorate = useRedecorate(id);\n\n  React.useEffect(() => {\n    editor.api.redecorate = redecorate;\n  }, [editor, redecorate]);\n\n  return null;\n};\n","import React from 'react';\n\nimport { useAtomStoreSet, useAtomStoreValue } from 'jotai-x';\n\nimport type { AnyEditorPlatePlugin } from '../plugin/PlatePlugin';\n\nimport { getEditorPlugin } from '../plugin';\nimport { useEditorRef, usePlateStore } from '../stores';\n\nexport function EditorRefPluginEffect({\n  id,\n  plugin,\n}: {\n  plugin: AnyEditorPlatePlugin;\n  id?: string;\n}) {\n  const editor = useEditorRef(id);\n\n  plugin.useHooks?.(getEditorPlugin(editor, plugin) as any);\n\n  return null;\n}\n\nexport function EditorRefEffect({ id }: { id?: string }) {\n  const store = usePlateStore(id);\n  const editor = useAtomStoreValue(store, 'editor');\n  const setIsMounted = useAtomStoreSet(store, 'isMounted');\n\n  React.useEffect(() => {\n    setIsMounted(true);\n\n    return () => {\n      setIsMounted(false);\n    };\n  }, [setIsMounted]);\n\n  return (\n    <>\n      {editor.pluginList.map((plugin) => (\n        <EditorRefPluginEffect id={id} key={plugin.key} plugin={plugin} />\n      ))}\n    </>\n  );\n}\n","import React from 'react';\n\nexport const EditorStateEffect = React.memo(() => {\n  // const editorState = useSlate();\n  // const updateVersionEditor = useIncrementVersion('versionEditor', id);\n  // React.useEffect(() => {\n  //   updateVersionEditor();\n  // });\n  // const updateVersionSelection = useIncrementVersion('versionSelection', id);\n  // const prevSelectionRef = React.useRef(editorState.selection);\n  // const sameSelection = isSelectionEqual(\n  //   prevSelectionRef.current,\n  //   editorState.selection\n  // );\n  // React.useEffect(() => {\n  //   if (!sameSelection) {\n  //     updateVersionSelection();\n  //   }\n  //   prevSelectionRef.current = editorState.selection;\n  // }, [editorState.selection, sameSelection, updateVersionSelection]);\n  return null;\n});\n\n// const isSelectionEqual = (a: EditorSelection, b: EditorSelection) => {\n//   if (!a && !b) return true;\n//   if (!a || !b) return false;\n\n//   return RangeApi.equals(a, b);\n// };\n","import React, { useId } from 'react';\n\nimport type { EditableProps } from '../../lib/types/EditableProps';\nimport type { PlateEditor } from '../editor/PlateEditor';\n\nimport { usePlateInstancesWarn } from '../../internal/hooks/usePlateInstancesWarn';\nimport { type PlateStoreState, PlateStoreProvider } from '../stores';\n\nexport interface PlateProps<E extends PlateEditor = PlateEditor>\n  extends Partial<\n    Pick<\n      PlateStoreState<E>,\n      | 'decorate'\n      | 'onChange'\n      | 'onSelectionChange'\n      | 'onValueChange'\n      | 'primary'\n      | 'readOnly'\n    >\n  > {\n  children: React.ReactNode;\n\n  editor: E | null;\n\n  renderElement?: EditableProps['renderElement'];\n\n  renderLeaf?: EditableProps['renderLeaf'];\n\n  suppressInstanceWarning?: boolean;\n}\n\nfunction PlateInner({\n  children,\n  containerRef,\n  decorate,\n  editor,\n  primary,\n  readOnly,\n  renderElement,\n  renderLeaf,\n  scrollRef,\n  onChange,\n  onSelectionChange,\n  onValueChange,\n}: PlateProps & {\n  containerRef: React.RefObject<HTMLDivElement | null>;\n  scrollRef: React.RefObject<HTMLDivElement | null>;\n}) {\n  return (\n    <PlateStoreProvider\n      readOnly={readOnly}\n      onChange={onChange}\n      onSelectionChange={onSelectionChange}\n      onValueChange={onValueChange}\n      containerRef={containerRef}\n      decorate={decorate}\n      editor={editor!}\n      primary={primary}\n      renderElement={renderElement}\n      renderLeaf={renderLeaf}\n      scope={editor!.id}\n      scrollRef={scrollRef}\n    >\n      {children}\n    </PlateStoreProvider>\n  );\n}\n\nexport function Plate<E extends PlateEditor = PlateEditor>(\n  props: PlateProps<E>\n) {\n  const id = useId();\n\n  const containerRef = React.useRef<HTMLDivElement>(null);\n  const scrollRef = React.useRef<HTMLDivElement>(null);\n\n  usePlateInstancesWarn(props.suppressInstanceWarning);\n\n  if (!props.editor) return null;\n\n  props.editor.uid = 'e-' + id.replaceAll(':', '');\n\n  return (\n    <PlateInner\n      key={props.editor.key}\n      containerRef={containerRef}\n      scrollRef={scrollRef}\n      {...(props as any)}\n    />\n  );\n}\n","import React from 'react';\n\ndeclare global {\n  interface Global {\n    __PLATE_INSTANCES__?: number;\n  }\n}\n\nfunction checkPlateInstances() {\n  (globalThis as any).__PLATE_INSTANCES__ =\n    ((globalThis as any).__PLATE_INSTANCES__ || 0) + 1;\n}\n\ncheckPlateInstances();\n\nexport function usePlateInstancesWarn(disabled?: boolean) {\n  React.useEffect(() => {\n    if (\n      !disabled &&\n      (globalThis as any).__PLATE_INSTANCES__ &&\n      (globalThis as any).__PLATE_INSTANCES__ > 1\n    ) {\n      console.warn(\n        'Detected multiple @udecode/plate-core instances!\\n' +\n          'Choose only one of these packages in your dependencies:\\n' +\n          '- @udecode/plate\\n' +\n          '- @udecode/plate-core\\n' +\n          '- @udecode/plate\\n\\n'\n      );\n    }\n  }, [disabled]);\n}\n","import React, { useRef } from 'react';\n\nimport { useComposedRef } from '@udecode/react-utils';\n\nimport type { EditableProps } from '../../lib/types/EditableProps';\n\nimport { useEditableProps } from '../hooks';\nimport { Editable } from '../slate-react';\nimport { type PlateStoreState, useEditorRef } from '../stores';\nimport { EditorHotkeysEffect } from './EditorHotkeysEffect';\nimport { EditorMethodsEffect } from './EditorMethodsEffect';\nimport { EditorRefEffect } from './EditorRefEffect';\nimport { PlateControllerEffect } from './PlateControllerEffect';\nimport { PlateSlate } from './PlateSlate';\n\nexport type PlateContentProps = Omit<EditableProps, 'decorate'> & {\n  /** Autofocus when it becomes editable (readOnly false -> readOnly true) */\n  autoFocusOnEditable?: boolean;\n  decorate?: PlateStoreState['decorate'];\n  disabled?: boolean;\n  /** R enders the editable content. */\n  renderEditable?: (editable: React.ReactElement<any>) => React.ReactNode;\n};\n\n/**\n * Editable with plugins.\n *\n * - Decorate prop\n * - DOM handler props\n * - ReadOnly prop\n * - Render.afterEditable\n * - Render.beforeEditable\n * - RenderElement prop\n * - RenderLeaf prop\n * - UseHooks\n */\nconst PlateContent = React.forwardRef(\n  (\n    { autoFocusOnEditable, renderEditable, ...props }: PlateContentProps,\n    ref\n  ) => {\n    const { id } = props;\n\n    const editor = useEditorRef(id);\n\n    if (!editor) {\n      throw new Error(\n        'Editor not found. Please ensure that PlateContent is rendered below Plate.'\n      );\n    }\n\n    const editableProps = useEditableProps(props);\n\n    const editableRef = useRef<HTMLDivElement | null>(null);\n    const combinedRef = useComposedRef(ref, editableRef);\n\n    const editable = <Editable ref={combinedRef} {...(editableProps as any)} />;\n\n    let afterEditable: React.ReactNode = null;\n    let beforeEditable: React.ReactNode = null;\n\n    editor.pluginList.forEach((plugin) => {\n      const {\n        render: {\n          afterEditable: AfterEditable,\n          beforeEditable: BeforeEditable,\n        },\n      } = plugin;\n\n      if (AfterEditable) {\n        afterEditable = (\n          <>\n            {afterEditable}\n            <AfterEditable {...editableProps} />\n          </>\n        );\n      }\n      if (BeforeEditable) {\n        beforeEditable = (\n          <>\n            {beforeEditable}\n            <BeforeEditable {...editableProps} />\n          </>\n        );\n      }\n    });\n\n    let aboveEditable: React.ReactNode = (\n      <>\n        {renderEditable ? renderEditable(editable) : editable}\n\n        <EditorMethodsEffect id={id} />\n        <EditorHotkeysEffect id={id} editableRef={editableRef} />\n        {/* <EditorStateEffect id={id} /> */}\n        <EditorRefEffect id={id} />\n        <PlateControllerEffect id={id} />\n      </>\n    );\n\n    editor.pluginList.forEach((plugin) => {\n      const {\n        render: { aboveEditable: AboveEditable },\n      } = plugin;\n\n      if (AboveEditable)\n        aboveEditable = <AboveEditable>{aboveEditable}</AboveEditable>;\n    });\n\n    const readOnly = props.readOnly ?? false;\n    const prevReadOnly = React.useRef(readOnly);\n\n    React.useEffect(() => {\n      if (autoFocusOnEditable && prevReadOnly.current && !readOnly) {\n        editor.tf.focus({ edge: 'endEditor' });\n      }\n\n      prevReadOnly.current = readOnly;\n    }, [autoFocusOnEditable, editor, readOnly]);\n\n    return (\n      <PlateSlate id={id}>\n        {beforeEditable}\n        {aboveEditable}\n        {afterEditable}\n      </PlateSlate>\n    );\n  }\n);\nPlateContent.displayName = 'PlateContent';\n\nexport { PlateContent };\n","import React from 'react';\n\nimport type { WritableAtom } from 'jotai/vanilla/atom';\n\nimport { useStableFn } from '@udecode/react-utils';\nimport { focusAtom } from 'jotai-optics';\nimport { type JotaiStore, useAtomStoreSet, useAtomStoreValue } from 'jotai-x';\n\nimport { useFocused } from '../slate-react';\nimport {\n  plateControllerStore,\n  useEditorId,\n  usePlateControllerLocalStore,\n  usePlateStore,\n} from '../stores';\n\nexport interface PlateControllerEffectProps {\n  id?: string;\n}\n\nexport const PlateControllerEffect = ({\n  id: idProp,\n}: PlateControllerEffectProps) => {\n  const idFromStore = useEditorId();\n  const id = idProp ?? idFromStore;\n\n  // Atom to set the store for the editor's ID\n  const currentStoreAtom = React.useMemo(\n    () =>\n      focusAtom(\n        plateControllerStore.atom.editorStores as WritableAtom<\n          Record<string, JotaiStore | null>,\n          any,\n          any\n        >,\n        (optic) => optic.prop(id)\n      ),\n    [id]\n  );\n\n  const setCurrentStore = useStableFn(\n    usePlateControllerLocalStore().setAtom(currentStoreAtom),\n    [currentStoreAtom]\n  );\n\n  const setPrimaryEditorIds = useStableFn(\n    useAtomStoreSet(usePlateControllerLocalStore(), 'primaryEditorIds')\n  );\n\n  const setActiveId = useStableFn(\n    useAtomStoreSet(usePlateControllerLocalStore(), 'activeId')\n  );\n\n  const store = usePlateStore(id);\n  const primary = useAtomStoreValue(store, 'primary');\n  const focused = useFocused();\n\n  // Keep the store up to date for the editor's ID\n  React.useEffect(() => {\n    setCurrentStore((store as any) ?? null);\n\n    /**\n     * On unmount or when the ID changes, unset the store for the old ID. If the\n     * old ID was active, set the active ID to null. It is a bug if this code\n     * runs at any other time, so the dependency array must be stable.\n     */\n    return () => {\n      setCurrentStore(null);\n      setActiveId((activeId) => (activeId === id ? null : activeId));\n    };\n  }, [store, setCurrentStore, setActiveId, id]);\n\n  // If the editor is primary, register it in the list of primary editors\n  React.useEffect(() => {\n    if (primary) {\n      setPrimaryEditorIds((ids) => [...ids, id]);\n\n      return () => {\n        setPrimaryEditorIds((ids) => ids.filter((i) => i !== id));\n      };\n    }\n  }, [id, primary, setPrimaryEditorIds]);\n\n  // Set the editor as active when it becomes focused\n  React.useEffect(() => {\n    if (id && focused) {\n      setActiveId(id);\n    }\n  }, [id, focused, setActiveId]);\n\n  return null;\n};\n","import React from 'react';\n\nimport { useSlateProps } from '../hooks';\nimport { Slate } from '../slate-react';\nimport { useEditorRef } from '../stores/plate';\n\n/**\n * Slate with plugins.\n *\n * - OnChange prop\n * - RenderAboveSlate\n */\nexport function PlateSlate({\n  id,\n  children,\n}: {\n  children: React.ReactNode;\n  id?: string;\n}) {\n  const slateProps = useSlateProps({ id });\n\n  const editor = useEditorRef(id);\n\n  let aboveSlate: React.ReactElement<any> | null = (\n    <Slate {...(slateProps as any)}>{children}</Slate>\n  );\n\n  editor.pluginList?.forEach((plugin) => {\n    const {\n      render: { aboveSlate: AboveSlate },\n    } = plugin;\n\n    if (AboveSlate) aboveSlate = <AboveSlate>{aboveSlate}</AboveSlate>;\n  });\n\n  return aboveSlate;\n}\n","import React from 'react';\n\nimport { type CreatePlateEditorOptions, createPlateEditor } from '../editor';\nimport { type PlateProps, Plate } from './Plate';\nimport { type PlateContentProps, PlateContent } from './PlateContent';\n\nexport function PlateTest({\n  editableProps,\n  shouldNormalizeEditor,\n  variant = 'wordProcessor',\n  ...props\n}: CreatePlateEditorOptions &\n  PlateProps & {\n    editableProps?: PlateContentProps;\n    variant?: 'comment' | 'wordProcessor';\n  }) {\n  const { id, editor: _editor, plugins } = props;\n\n  let editor = _editor;\n\n  if (editor && !editor.pluginList) {\n    editor = createPlateEditor({\n      id,\n      editor,\n      plugins,\n      shouldNormalizeEditor,\n    });\n  }\n\n  return (\n    <Plate {...props} editor={editor}>\n      <PlateContent\n        data-testid=\"slate-content-editable\"\n        data-variant={variant}\n        autoFocus\n        {...editableProps}\n      />\n    </Plate>\n  );\n}\n","import React from 'react';\n\nimport type { Value } from '@udecode/slate';\n\nimport type { AnyPluginConfig } from '../../lib';\n\nimport {\n  type CreatePlateEditorOptions,\n  type PlateCorePlugin,\n  type TPlateEditor,\n  createPlateEditor,\n} from '../editor';\n\n/**\n * A memoized version of createPlateEditor for use in React components.\n *\n * @param {CreatePlateEditorOptions} options - Configuration options for\n *   creating the Plate editor.\n * @param {React.DependencyList} [deps=[]] - Additional dependencies for the\n *   useMemo hook, in addition to `options.id`. Default is `[]`\n * @see {@link createPlateEditor} for detailed information on React editor creation and configuration.\n * @see {@link createSlateEditor} for a non-React version of editor creation.\n * @see {@link withPlate} for the underlying React-specific enhancement function.\n */\nexport function usePlateEditor<\n  V extends Value = Value,\n  P extends AnyPluginConfig = PlateCorePlugin,\n  TEnabled extends boolean | undefined = undefined,\n>(\n  options: CreatePlateEditorOptions<V, P> & { enabled?: TEnabled } = {},\n  deps: React.DependencyList = []\n): TEnabled extends false\n  ? null\n  : TEnabled extends true | undefined\n    ? TPlateEditor<V, P>\n    : TPlateEditor<V, P> | null {\n  return React.useMemo(\n    (): any => {\n      if (options.enabled === false) return null;\n\n      const editor = createPlateEditor(options);\n\n      return editor;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [options.id, options.enabled, ...deps]\n  );\n}\n","import React from 'react';\n\ntype RefComponent<P, R> = React.FC<P> & {\n  ref?: React.Ref<R>;\n};\n\nexport const withHOC = <ComponentProps, HOCProps, ComponentRef, HOCRef>(\n  HOC: RefComponent<HOCProps, HOCRef>,\n  Component: RefComponent<ComponentProps, ComponentRef>,\n  hocProps?: Omit<HOCProps, 'children'>,\n  hocRef?: React.Ref<HOCRef>\n) =>\n  React.forwardRef<ComponentRef, ComponentProps>((props, componentRef) => (\n    <HOC {...(hocProps as any)} ref={hocRef}>\n      <Component {...(props as any)} ref={componentRef} />\n    </HOC>\n  ));\n"],"mappings":"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A;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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","names":["clsx","config","result","merge","merge","plugin","isDefined","isDefined","merge","merge","ElementApi","TextApi","jsx","isDefined","isDefined","jsx","ElementApi","TextApi","jsx","ElementApi","TextApi","jsx","document","TextApi","ElementApi","createZustandStore","getEditorPlugin","clsx","React","useEffect","isDefined","useAtomStoreValue","React","atom","useAtomStoreValue","createEditor","isDefined","isDefined","createZustandStore","createEditor","clsx","getEditorPlugin","clsx","getEditorPlugin","getEditorPlugin","React","React","clsx","React","React","React","React","React","clsx","React","useAtomStoreValue","useAtomStoreValue","React","React","withHOC","React","React","React","atom","atom","React","atom","atom","React","useAtomStoreValue","React","React","getEditorPlugin","React","useStoreAtomValue","React","useStoreAtomValue","useStoreSelect","useStoreValue","useStoreValue","useStoreSelect","useAtomStoreValue","React","useStoreAtomValue","selectAtom","React","selectAtom","useStoreAtomValue","useAtomStoreValue","useAtomStoreValue","React","isDefined","useEffect","React","React","React","useAtomStoreSet","useAtomStoreValue","getEditorPlugin","useAtomStoreValue","useAtomStoreSet","React","React","React","React","React","React","React","useAtomStoreSet","useAtomStoreValue","React","useAtomStoreSet","useAtomStoreValue","React","React","React","React","React","React","React","React"]}