import {html} from "lit" import {view} from "@chasemoskal/magical" import {when} from "../../../tools/when.js" import {Waiting} from "./gui/types/waiting.js" import {GuiOptions} from "./gui/types/gui-options.js" import {NubCauseEvent} from "../../../events/cause.js" import {renderKeybind} from "./gui/renderers/render-keybind.js" import {BindingsDialogView} from "./gui/views/bindings-dialog.js" import {controlKeybindAssignments} from "./gui/utils/control-keybind-assignments.js" export const GuiEditorPanelView = view({}, use => ({ bindingsDraft, setBindingsDraft, getBindingsDraft, availableModes, getMode, setMode, listenForCauseEventsOn, }: GuiOptions) => { const [waiting, setWaiting, getWaiting] = use.state(undefined) const [showDialog, setShowDialog, getShowDialog] = use.state(false) const [keysPressed, setKeysPressed, getKeysPressed] = use.state([]) use.setup(() => NubCauseEvent .target(listenForCauseEventsOn) .listen(controlKeybindAssignments({ getMode, getWaiting, setWaiting, getBindingsDraft, setBindingsDraft, setKeysPressed, getShowDialog, setShowDialog, getKeysPressed })) ) const mode = getMode() const kindbinds = bindingsDraft.modes[mode] const keybinds = kindbinds?.key ?? {} return html`
${availableModes.map(availableMode => html` `)}
${Object .entries(keybinds) .map(renderKeybind(waiting, setWaiting, setShowDialog))}
${when(showDialog, () => BindingsDialogView({ keysPressed, setKeysPressed }))}
` })