var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { d as defineComponent, q as computed, g as openBlock, h as createElementBlock, N as Fragment, O as renderList, i as createVNode, y as withCtx, aw as createTextVNode, a6 as toDisplayString, z as unref, aA as script, j as createCommentVNode, r as ref, bN as FilterMatchMode, M as useKeybindingStore, F as useCommandStore, aJ as watchEffect, b9 as useToast, t as resolveDirective, bO as SearchBox, A as createBaseVNode, D as script$2, x as createBlock, ao as script$4, be as withModifiers, aH as script$6, v as withDirectives, P as pushScopeId, Q as popScopeId, bJ as KeyComboImpl, bP as KeybindingImpl, _ as _export_sfc } from "./index-BHayQCxv.js";
import { s as script$1, a as script$3, b as script$5 } from "./index-CwRXxFdA.js";
import "./index-C_wOqB0f.js";
const _hoisted_1$1 = {
  key: 0,
  class: "px-2"
};
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
  __name: "KeyComboDisplay",
  props: {
    keyCombo: {},
    isModified: { type: Boolean, default: false }
  },
  setup(__props) {
    const props = __props;
    const keySequences = computed(() => props.keyCombo.getKeySequences());
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("span", null, [
        (openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => {
          return openBlock(), createElementBlock(Fragment, { key: index }, [
            createVNode(unref(script), {
              severity: _ctx.isModified ? "info" : "secondary"
            }, {
              default: withCtx(() => [
                createTextVNode(toDisplayString(sequence), 1)
              ]),
              _: 2
            }, 1032, ["severity"]),
            index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true)
          ], 64);
        }), 128))
      ]);
    };
  }
});
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-e5724e4d"), n = n(), popScopeId(), n), "_withScopeId");
const _hoisted_1 = { class: "keybinding-panel" };
const _hoisted_2 = { class: "actions invisible" };
const _hoisted_3 = { key: 1 };
const _sfc_main = /* @__PURE__ */ defineComponent({
  __name: "KeybindingPanel",
  setup(__props) {
    const filters = ref({
      global: { value: "", matchMode: FilterMatchMode.CONTAINS }
    });
    const keybindingStore = useKeybindingStore();
    const commandStore = useCommandStore();
    const commandsData = computed(() => {
      return Object.values(commandStore.commands).map((command) => ({
        id: command.id,
        keybinding: keybindingStore.getKeybindingByCommandId(command.id)
      }));
    });
    const selectedCommandData = ref(null);
    const editDialogVisible = ref(false);
    const newBindingKeyCombo = ref(null);
    const currentEditingCommand = ref(null);
    const keybindingInput = ref(null);
    const existingKeybindingOnCombo = computed(() => {
      if (!currentEditingCommand.value) {
        return null;
      }
      if (currentEditingCommand.value.keybinding?.combo?.equals(
        newBindingKeyCombo.value
      )) {
        return null;
      }
      if (!newBindingKeyCombo.value) {
        return null;
      }
      return keybindingStore.getKeybinding(newBindingKeyCombo.value);
    });
    function editKeybinding(commandData) {
      currentEditingCommand.value = commandData;
      newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null;
      editDialogVisible.value = true;
    }
    __name(editKeybinding, "editKeybinding");
    watchEffect(() => {
      if (editDialogVisible.value) {
        setTimeout(() => {
          keybindingInput.value?.$el?.focus();
        }, 300);
      }
    });
    function removeKeybinding(commandData) {
      if (commandData.keybinding) {
        keybindingStore.unsetKeybinding(commandData.keybinding);
        keybindingStore.persistUserKeybindings();
      }
    }
    __name(removeKeybinding, "removeKeybinding");
    function captureKeybinding(event) {
      const keyCombo = KeyComboImpl.fromEvent(event);
      newBindingKeyCombo.value = keyCombo;
    }
    __name(captureKeybinding, "captureKeybinding");
    function cancelEdit() {
      editDialogVisible.value = false;
      currentEditingCommand.value = null;
      newBindingKeyCombo.value = null;
    }
    __name(cancelEdit, "cancelEdit");
    function saveKeybinding() {
      if (currentEditingCommand.value && newBindingKeyCombo.value) {
        const updated = keybindingStore.updateKeybindingOnCommand(
          new KeybindingImpl({
            commandId: currentEditingCommand.value.id,
            combo: newBindingKeyCombo.value
          })
        );
        if (updated) {
          keybindingStore.persistUserKeybindings();
        }
      }
      cancelEdit();
    }
    __name(saveKeybinding, "saveKeybinding");
    const toast = useToast();
    async function resetKeybindings() {
      keybindingStore.resetKeybindings();
      await keybindingStore.persistUserKeybindings();
      toast.add({
        severity: "info",
        summary: "Info",
        detail: "Keybindings reset",
        life: 3e3
      });
    }
    __name(resetKeybindings, "resetKeybindings");
    return (_ctx, _cache) => {
      const _directive_tooltip = resolveDirective("tooltip");
      return openBlock(), createElementBlock("div", _hoisted_1, [
        createVNode(unref(script$3), {
          value: commandsData.value,
          selection: selectedCommandData.value,
          "onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event),
          "global-filter-fields": ["id"],
          filters: filters.value,
          selectionMode: "single",
          stripedRows: "",
          pt: {
            header: "px-0"
          }
        }, {
          header: withCtx(() => [
            createVNode(SearchBox, {
              modelValue: filters.value["global"].value,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
              placeholder: _ctx.$t("searchKeybindings") + "..."
            }, null, 8, ["modelValue", "placeholder"])
          ]),
          default: withCtx(() => [
            createVNode(unref(script$1), {
              field: "actions",
              header: ""
            }, {
              body: withCtx((slotProps) => [
                createBaseVNode("div", _hoisted_2, [
                  createVNode(unref(script$2), {
                    icon: "pi pi-pencil",
                    class: "p-button-text",
                    onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick")
                  }, null, 8, ["onClick"]),
                  createVNode(unref(script$2), {
                    icon: "pi pi-trash",
                    class: "p-button-text p-button-danger",
                    onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"),
                    disabled: !slotProps.data.keybinding
                  }, null, 8, ["onClick", "disabled"])
                ])
              ]),
              _: 1
            }),
            createVNode(unref(script$1), {
              field: "id",
              header: "Command ID",
              sortable: ""
            }),
            createVNode(unref(script$1), {
              field: "keybinding",
              header: "Keybinding"
            }, {
              body: withCtx((slotProps) => [
                slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
                  key: 0,
                  keyCombo: slotProps.data.keybinding.combo,
                  isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id)
                }, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
              ]),
              _: 1
            })
          ]),
          _: 1
        }, 8, ["value", "selection", "filters"]),
        createVNode(unref(script$6), {
          class: "min-w-96",
          visible: editDialogVisible.value,
          "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event),
          modal: "",
          header: currentEditingCommand.value?.id,
          onHide: cancelEdit
        }, {
          footer: withCtx(() => [
            createVNode(unref(script$2), {
              label: "Save",
              icon: "pi pi-check",
              onClick: saveKeybinding,
              disabled: !!existingKeybindingOnCombo.value,
              autofocus: ""
            }, null, 8, ["disabled"])
          ]),
          default: withCtx(() => [
            createBaseVNode("div", null, [
              createVNode(unref(script$4), {
                class: "mb-2 text-center",
                ref_key: "keybindingInput",
                ref: keybindingInput,
                modelValue: newBindingKeyCombo.value?.toString() ?? "",
                placeholder: "Press keys for new binding",
                onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]),
                autocomplete: "off",
                fluid: "",
                invalid: !!existingKeybindingOnCombo.value
              }, null, 8, ["modelValue", "invalid"]),
              existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), {
                key: 0,
                severity: "error"
              }, {
                default: withCtx(() => [
                  createTextVNode(" Keybinding already exists on "),
                  createVNode(unref(script), {
                    severity: "secondary",
                    value: existingKeybindingOnCombo.value.commandId
                  }, null, 8, ["value"])
                ]),
                _: 1
              })) : createCommentVNode("", true)
            ])
          ]),
          _: 1
        }, 8, ["visible", "header"]),
        withDirectives(createVNode(unref(script$2), {
          class: "mt-4",
          label: _ctx.$t("reset"),
          icon: "pi pi-trash",
          severity: "danger",
          fluid: "",
          text: "",
          onClick: resetKeybindings
        }, null, 8, ["label"]), [
          [_directive_tooltip, _ctx.$t("resetKeybindingsTooltip")]
        ])
      ]);
    };
  }
});
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e5724e4d"]]);
export {
  KeybindingPanel as default
};
//# sourceMappingURL=KeybindingPanel-Dm_3sBT5.js.map
