ComposedModal — это компонент библиотеки Carbon
Components Svelte, предназначенный для построения сложных модальных окон
с богатой структурой и управляемым поведением. В отличие от простых
модальных окон (Modal), ComposedModal
позволяет разделять содержимое на несколько логических секций, управлять
действиями пользователя и обеспечивать согласованное взаимодействие с
интерфейсом.
Компонент состоит из нескольких вложенных компонентов:
Пример базовой структуры:
Это тело модального окна. Здесь может быть любой контент: формы, таблицы, изображения.
Ключевой момент: использование
bind:open позволяет связывать состояние модального окна с
переменной, что упрощает его управление извне.
ComposedModal предоставляет следующие события:
on:open — срабатывает при открытии модалки.on:close — срабатывает при закрытии.on:submit — срабатывает при подтверждении действия
(если предусмотрена кнопка подтверждения).Пример с обработкой событий:
console.log("Модалка открыта")}
on:close={() => console.log("Модалка закрыта")}
on:submit={() => console.log("Подтверждение действия")}
>
Тело модального окна с событиями.
Использование события submit особенно полезно при работе
с формами внутри модального окна, так как позволяет централизованно
обрабатывать данные без привязки к конкретным кнопкам.
ComposedModal идеально подходит для сложных форм. Структурирование модального окна помогает поддерживать читаемость кода и логически разделять блоки.
Пример формы:
Особенности:
bind:value.on:submit позволяет
централизованно обрабатывать данные и закрывать модальное окно.
sm, md, lg), что важно для
отображения больших таблиц или сложных форм.
...
...
ComposedModal допускает вложенность для создания
пошаговых процессов. Вложенные модалки должны управляться отдельными
состояниями open и правильно обрабатывать закрытие верхнего
уровня, чтобы избежать конфликтов интерфейса.
Пример двухуровневой модалки:
Дополнительный шаг процесса.
Важно: вложенные модалки не блокируют родительское окно, если нужно избежать взаимодействия с ним, следует использовать фоновые блоки или дополнительные состояния блокировки.
class — позволяет добавлять собственные CSS-классы к
модальному окну.modalClass — отдельное свойство для добавления стилей к
самой модалке без изменения обертки.
...
class и стандартные CSS-переменные Carbon.bind:open и события
on:submit, on:close для управления состоянием
модалки.selectorPrimaryFocus для доступности.