import { createMemo } from "solid-js" import { DialogSelect, type DialogSelectRef } from "../ui/dialog-select" import { type DialogContext } from "../ui/dialog" import { COMMAND_PALETTE_COMMAND, Keymap, type KeymapCommand } from "../context/keymap" function isSuggestedPaletteCommand(command: KeymapCommand) { const suggested = command.suggested if (typeof suggested === "boolean") return suggested if (typeof suggested === "function") return suggested() === true return false } export function CommandPaletteDialog() { const commands = Keymap.useCommands() const shortcuts = Keymap.useShortcuts() const options = createMemo(() => commands().flatMap((command) => { if (!command.id || !command.palette || command.id === COMMAND_PALETTE_COMMAND) return [] return { title: command.title ?? command.id, description: command.description, category: command.group, footer: shortcuts.all(command.id), value: command.id, suggested: isSuggestedPaletteCommand(command), onSelect: (dialog: DialogContext) => { dialog.clear() command.run() }, } }), ) let ref: DialogSelectRef const list = () => { if (ref?.filter) return options() return [ ...options() .filter((option) => option.suggested) .map((option) => ({ ...option, value: `suggested:${option.value}`, category: "Suggested", })), ...options(), ] } return (ref = value)} title="Commands" options={list()} /> }