/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow strict
 */

import type {
  LexicalExtension,
  CommandListenerPriority,
  CommandListenerPriorityBefore,
  KeyboardShortcut,
  KeyboardShortcutMatch,
} from 'lexical';
import type {NamedSignalsOutput} from '@lexical/extension/namedSignals';

export interface FormatKeyboardShortcutOptions {
  isApple?: boolean;
  separator?: string;
}

declare export function formatKeyboardShortcut(
  shortcut: KeyboardShortcutMatch,
  options?: FormatKeyboardShortcutOptions,
): string[];

export type NamedKeyboardShortcuts = Record<
  string,
  KeyboardShortcut | ReadonlyArray<KeyboardShortcut> | null,
>;

export type KeyboardShortcutsConfig = {
  disabled: boolean,
  priority: CommandListenerPriority | CommandListenerPriorityBefore,
  shortcuts: NamedKeyboardShortcuts,
};

declare export var KeyboardShortcutsExtension: LexicalExtension<
  KeyboardShortcutsConfig,
  '@lexical/extension/KeyboardShortcuts',
  NamedSignalsOutput<KeyboardShortcutsConfig>,
  unknown,
>;
