(
config:
| ((editor: SlateEditor) => SlatePluginConfig<K, O, A, T, S>)
| SlatePluginConfig<K, O, A, T, S> = {}
)
| 89 | * plugins) or add a new one if not found. |
| 90 | */ |
| 91 | export function createSlatePlugin< |
| 92 | K extends string = any, |
| 93 | O = {}, |
| 94 | A = {}, |
| 95 | T = {}, |
| 96 | S = {}, |
| 97 | >( |
| 98 | config: |
| 99 | | ((editor: SlateEditor) => SlatePluginConfig<K, O, A, T, S>) |
| 100 | | SlatePluginConfig<K, O, A, T, S> = {} |
| 101 | ): SlatePlugin<PluginConfig<K, O, A, T, S>> { |
| 102 | let baseConfig: Partial<SlatePlugin<PluginConfig<K, O, A, T, S>>>; |
| 103 | let initialExtension: any; |
| 104 | |
| 105 | if (isFunction(config)) { |
| 106 | baseConfig = { key: '' as K }; |
| 107 | initialExtension = (editor: any) => config(editor); |
| 108 | } else { |
| 109 | baseConfig = config as any; |
| 110 | } |
| 111 | |
| 112 | const key = baseConfig.key ?? ''; |
| 113 | |
| 114 | const plugin = mergePlugins( |
| 115 | { |
| 116 | key, |
| 117 | __apiExtensions: [], |
| 118 | __configuration: null, |
| 119 | __extensions: initialExtension ? [initialExtension] : [], |
| 120 | __selectorExtensions: [], |
| 121 | api: {}, |
| 122 | dependencies: [], |
| 123 | editor: {}, |
| 124 | handlers: {}, |
| 125 | inject: {}, |
| 126 | node: { type: key }, |
| 127 | options: {}, |
| 128 | override: {}, |
| 129 | parser: {}, |
| 130 | parsers: {}, |
| 131 | plugins: [], |
| 132 | priority: 100, |
| 133 | render: {}, |
| 134 | rules: {}, |
| 135 | shortcuts: {}, |
| 136 | inputRules: [], |
| 137 | transforms: {}, |
| 138 | }, |
| 139 | config |
| 140 | ) as unknown as SlatePlugin<PluginConfig<K, O, A, T, S>>; |
| 141 | |
| 142 | if (plugin.node.isLeaf && !isDefined(plugin.node.isDecoration)) { |
| 143 | plugin.node.isDecoration = true; |
| 144 | } |
| 145 | |
| 146 | plugin.configure = (config) => { |
| 147 | const newPlugin = { ...plugin }; |
| 148 | newPlugin.__configuration = (ctx) => |
searching dependent graphs…