@@ -169,11 +169,13 @@ export function createListHandler(listType: 'bulletList' | 'orderedList' | 'task
169169} as const
170170const fnName = fnNameMap[listType]
171171const listItemType = listType === 'taskList' ? 'taskItem' : 'listItem'
172+const allListTypes = ['bulletList', 'orderedList', 'taskList'] as const
172173173174return {
174175canExecute: (editor: Editor) => {
175-// Can execute if the toggle command works OR we're in any list type (to allow conversion)
176-return (editor.can() as any)[fnName]() || editor.isActive('bulletList') || editor.isActive('orderedList') || editor.isActive('taskList') || editor.isActive('taskItem') || editor.isActive('listItem')
176+return (editor.can() as any)[fnName]()
177+|| editor.isActive('listItem')
178+|| allListTypes.some(type => isExtensionAvailable(editor, type) && editor.isActive(type))
177179},
178180execute: (editor: Editor) => {
179181const { state } = editor
@@ -197,24 +199,24 @@ export function createListHandler(listType: 'bulletList' | 'orderedList' | 'task
197199}
198200199201if (editor.isActive(listType)) {
200-// Unwrap list if same type is active
201-return chain
202-.liftListItem(listItemType)
203-.lift('bulletList')
204-.lift('orderedList')
205- .lift('taskList')
206- .selectTextblockEnd()
202+let result = chain.liftListItem(listItemType)
203+for (const type of allListTypes) {
204+if (isExtensionAvailable(editor, type)) {
205+ result = result.lift(type)
206+}
207+}
208+return result.selectTextblockEnd()
207209}
208210209211// Check if a different list type is active and convert
210-const currentListItemType = editor.isActive('taskList') ? 'taskItem' : 'listItem'
211-if (editor.isActive('bulletList') || editor.isActive('orderedList') || editor.isActive('taskList')) {
212-// First unwrap the current list, then wrap in the new list type
213-const unwrapped = chain
214-.liftListItem(currentListItemType)
215-.lift('bulletList')
216-.lift('orderedList')
217- .lift('taskList')
212+if (allListTypes.some(type => isExtensionAvailable(editor, type) && editor.isActive(type))) {
213+ const currentListItemType = editor.isActive('taskList') ? 'taskItem' : 'listItem'
214+let unwrapped = chain.liftListItem(currentListItemType)
215+for (const type of allListTypes) {
216+if (isExtensionAvailable(editor, type)) {
217+ unwrapped = unwrapped.lift(type)
218+}
219+}
218220return (unwrapped as any)[fnName]().selectTextblockEnd()
219221}
220222