refactor(tiptap): type CommandItem.editor as Editor, explicit SlashPopup return type

This commit is contained in:
xfy 2026-06-23 18:33:59 +08:00
parent 073f6936e3
commit 558191e922

View File

@ -1,4 +1,4 @@
import { Extension, type Range } from '@tiptap/core' import { Extension, type Editor, type Range } from '@tiptap/core'
import { Suggestion, type SuggestionProps, type SuggestionKeyDownProps } from '@tiptap/suggestion' import { Suggestion, type SuggestionProps, type SuggestionKeyDownProps } from '@tiptap/suggestion'
import { PluginKey } from '@tiptap/pm/state' import { PluginKey } from '@tiptap/pm/state'
@ -6,7 +6,7 @@ interface CommandItem {
title: string title: string
description: string description: string
icon: string icon: string
command: (props: { editor: any; range: Range }) => void command: (props: { editor: Editor; range: Range }) => void
} }
/** /**
@ -198,7 +198,7 @@ export const SlashCommand = Extension.create<SlashCommandOptions>({
) )
}, },
render() { render() {
let popup: ReturnType<typeof createPopup> | null = null let popup: SlashPopup | null = null
return { return {
onStart(props) { onStart(props) {
@ -229,7 +229,16 @@ export const SlashCommand = Extension.create<SlashCommandOptions>({
}, },
}) })
function createPopup(props: SuggestionProps<CommandItem>) { /** 斜杠命令浮层实例:供 Suggestion render 生命周期驱动。 */
interface SlashPopup {
component: HTMLElement
updateItems(items: CommandItem[]): void
updatePosition(): void
onKeyDown(props: SuggestionKeyDownProps): boolean
destroy(): void
}
function createPopup(props: SuggestionProps<CommandItem>): SlashPopup {
const component = document.createElement('div') const component = document.createElement('div')
component.classList.add('slash-command') component.classList.add('slash-command')