TransactionalModal — это компонент библиотеки Carbon Components Svelte, предназначенный для создания модальных окон, которые требуют от пользователя подтверждения действия. Он используется в интерфейсах, где критически важно убедиться, что пользователь осознанно выполняет определённое действие, например, удаление данных, подтверждение финансовой операции или завершение процесса без возможности отмены.
open (boolean) Управляет видимостью модального окна.
При true модальное окно отображается, при
false — скрыто. Часто связывается с реактивной переменной
Svelte.
modalLabel (string) Верхний ярлык модального окна,
обычно короткий текст, например, «Подтверждение удаления».
modalHeading (string) Заголовок модального окна.
Отображается крупным шрифтом в верхней части окна и привлекает внимание
к сути действия.
passiveModal (boolean) Определяет тип модального
окна. В режиме true окно отображает информацию без кнопок
подтверждения и отмены. В режиме false используется
TransactionalModal с обязательной реакцией пользователя.
primaryButtonText (string) Текст кнопки
подтверждения действия, например «Удалить», «Сохранить»,
«Отправить».
secondaryButtonText (string) Текст кнопки отмены или
возврата. Обычно «Отмена» или «Назад».
danger (boolean) Определяет стиль модального окна
как «опасное действие». При значении true кнопка
подтверждения получает красную окраску, визуально сигнализируя о
риске.
<script>
import { TransactionalModal } from 'carbon-components-svelte';
let isOpen = false;
function confirmAction() {
console.log("Действие подтверждено");
isOpen = false;
}
function cancelAction() {
console.log("Действие отменено");
isOpen = false;
}
</script>
<TransactionalModal
open={isOpen}
modalLabel="Подтверждение удаления"
modalHeading="Вы уверены, что хотите удалить этот элемент?"
primaryButtonText="Удалить"
secondaryButtonText="Отмена"
danger={true}
on:secondaryButtonClick={cancelAction}
on:primaryButtonClick={confirmAction}
/>
События кнопок TransactionalModal поддерживает
два основных события: primaryButtonClick и
secondaryButtonClick. Они позволяют привязать
пользовательскую логику к кнопкам «Подтвердить» и «Отмена». События
всегда передаются как объекты событий Svelte (CustomEvent),
поэтому можно использовать event.preventDefault() для
предотвращения стандартного поведения.
Реактивное управление видимостью Связывание
свойства open с реактивной переменной обеспечивает полный
контроль над показом и скрытием модального окна. Изменение переменной
автоматически отобразит или закроет модальное окно без дополнительных
вызовов методов.
Опасные действия Использование
danger={true} не только изменяет визуальный стиль кнопки,
но и помогает пользователю осознанно подтвердить рискованное действие.
Рекомендуется применять только для операций с необратимыми
последствиями.
Пользовательский контент TransactionalModal позволяет вставлять в тело модального окна произвольный контент через слот. Это могут быть списки деталей действия, предупреждающие сообщения или дополнительные инструкции.
<TransactionalModal open={isOpen} modalLabel="Удаление данных" modalHeading="Подтвердите удаление" primaryButtonText="Удалить" secondaryButtonText="Отмена" danger={true}>
<p>Вы собираетесь удалить следующие элементы:</p>
<ul>
<li>Файл 1</li>
<li>Файл 2</li>
<li>Файл 3</li>
</ul>
</TransactionalModal>
Совместимость с формами TransactionalModal может
использоваться внутри форм. Для этого достаточно поместить элементы
формы внутрь слота модального окна и обработать подтверждение через
primaryButtonClick, собирая значения полей формы.
Анимация и UX Компонент поддерживает плавное
появление и скрытие, что обеспечивает приятный пользовательский опыт.
Рекомендуется использовать анимацию совместно с реактивной переменной
open для создания предсказуемого поведения
интерфейса.
<TransactionalModal open={isOpen} modalLabel="Финансовая операция" modalHeading="Вы собираетесь отправить $500" primaryButtonText="Подтвердить" secondaryButtonText="Отмена">
<p>Получатель: Иван Иванов</p>
<p>Счёт: 40817810099910000001</p>
<p>Дата: 21.03.2026</p>
</TransactionalModal>
<TransactionalModal open={isOpen} modalLabel="Выбор действия" modalHeading="Выберите вариант" primaryButtonText="Сохранить" secondaryButtonText="Отмена">
<div>
<button on:click={() => console.log('Сохранено локально')}>Сохранить локально</button>
<button on:click={() => console.log('Отправлено на сервер')}>Отправить на сервер</button>
</div>
</TransactionalModal>
TransactionalModal в Carbon Components Svelte обеспечивает мощный инструмент для создания безопасных и информативных модальных окон. Он сочетает строгую визуальную сигнализацию опасных действий с гибкостью вставки пользовательского контента, позволяя строить интерфейсы, где критически важно подтверждение действий пользователя.