import { Plugin } from 'prosemirror-state'; interface ICtrlPluginCtrl { register: (props: T, prioritized?: boolean) => void; unregister: (props: T) => void; } interface ICtrlPlugin extends Plugin { registerProps: (props: T, prioritized?: boolean) => void; unregisterProps: (props: T) => void; } const createCtrlPlugin = (spec: Plugin['spec'], ctrlCenter: ICtrlPluginCtrl) => { const ctrlPlugin = new Plugin(spec) as ICtrlPlugin; ctrlPlugin.props = spec.props!; ctrlPlugin.registerProps = (props: T, prioritized?: boolean) => ctrlCenter.register(props, prioritized); ctrlPlugin.unregisterProps = (props: T) => ctrlCenter.unregister(props); return ctrlPlugin; }; export { createCtrlPlugin, ICtrlPlugin };