Визуальный компонент для ввода пользователем (“команды”)

Вопрос или проблема

Я ищу существующую библиотеку, которая предоставит визуальный компонент для «введения пользовательских команд»:

  • компонент появляется на экране при удерживании комбинации горячих клавиш (например, Ctrl + L),
  • это всплывающее окно, ожидающее ввода от пользователя и нажатия Enter
  • при нажатии Enter вызывается функция JavaScript с передачей введенного пользователем значения в качестве аргумента
  • пользователь может выйти из ввода, нажав клавишу Esc.

Я буду рад любым указаниям на фрагменты JS-кода для создания простого компонента подобного рода. Я работаю над прототипом, не требуется ни модного дизайна, ни особенно широких возможностей настройки. (Не обращайте внимания на внешний вид приложения Slack ниже, он хорош, но может быть слишком сложным для прототипа приложения, которое я создаю на данном этапе).

Вот пара скриншотов того типа компонента, который я ищу:

AlfredApp
SublimeText 4
Slack
Algolia

Ищу что-то похожее на https://kbar.vercel.app, но на чистом JavaScript, т.е. не компонент React.

Ответ или решение

Для реализации визуального компонента ввода команд с указанными вами требованиями, существует несколько подходов, включая использование готовых библиотек. Однако, если вам нужно создать такой компонент с нуля на чистом JavaScript, это вполне возможно. Давайте разберем, как можно реализовать данный функционал шаг за шагом.

Шаг 1: Создание HTML-разметки

Для начала, создадим простую HTML-структуру, которая будет представлять наш модальный ввод команд:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Командный ввод</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="command-prompt" class="hidden">
        <input id="command-input" type="text" placeholder="Введите команду" autofocus />
    </div>
    <script src="script.js"></script>
</body>
</html>

Шаг 2: CSS для оформления

Необходимо немного стилей, чтобы наш модальный ввод выглядел приятно:

/* styles.css */
body {
    font-family: Arial, sans-serif;
}

#command-prompt {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: white;
    border: 1px solid #ccc;
    border-radius: 5px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    padding: 20px;
    z-index: 1000;
}

.hidden {
    display: none;
}

#command-input {
    width: 100%;
    padding: 10px;
    font-size: 16px;
}

Шаг 3: JavaScript для функциональности

Теперь, когда у нас есть HTML и CSS, мы добавим функциональность с помощью JavaScript. Мы обеспечим обработку нажатия клавиш, а также вызов функций на основе ввода пользователя.

// script.js
document.addEventListener('DOMContentLoaded', () => {
    const commandPrompt = document.getElementById('command-prompt');
    const commandInput = document.getElementById('command-input');

    // Функция для обработки ввода команды
    function handleCommand(command) {
        console.log('Введенная команда:', command);
        // Дополнительная логика обработки команды
        commandPrompt.classList.add('hidden');
        commandInput.value = '';  // Очистить ввод
    }

    // Обработка нажатий клавиш
    document.addEventListener('keydown', (event) => {
        if (event.ctrlKey && event.key === 'l') {
            event.preventDefault();
            commandPrompt.classList.remove('hidden');
            commandInput.focus();
        } else if (event.key === 'Escape') {
            commandPrompt.classList.add('hidden');
        } else if (event.key === 'Enter') {
            const command = commandInput.value.trim();
            if (command) {
                handleCommand(command);
            }
        }
    });
});

Заключение

Такой подход позволит вам создать простой, но эффективный модальный компонент для ввода команд с использованием чистого JavaScript. Вы можете легко адаптировать стиль и структуру к вашим конкретным нуждам.

Если вы ищете готовые решения, можете обратить внимание на библиотеки, такие как Micromodal.js для управления модальными окнами или vanilla-dialog. Однако, если задача связана с быстрым прототипированием, то самописный компонент будет оптимальным.

Если вам нужно больше функциональности или у вас есть дополнительные требования, не стесняйтесь уточнять!

Оцените материал
Добавить комментарий

Капча загружается...