ButtonSet — это компонент, который позволяет логически и визуально объединять несколько кнопок в единый блок. Он используется для управления набором действий, которые имеют тесную функциональную связь. В Svelte реализован через библиотеку Carbon Components Svelte, предоставляя удобный способ организации кнопок с соблюдением дизайн-системы Carbon.
Компонент ButtonSet предоставляет следующие ключевые
свойства:
stacked (boolean) Определяет, будут ли кнопки
располагаться вертикально. По умолчанию кнопки выстраиваются
горизонтально.
<ButtonSet stacked>
<Button>Кнопка 1</Button>
<Button>Кнопка 2</Button>
</ButtonSet>class (string) Позволяет добавить кастомные
CSS-классы для дополнительного стилирования блока кнопок.
type (string) Определяет поведение кнопок внутри
набора. На практике чаще всего управляется через сами кнопки, но иногда
полезно применять к контейнеру.
Горизонтальная группировка кнопок
<script>
import { ButtonSet, Button } from 'carbon-components-svelte';
</script>
<ButtonSet>
<Button kind="primary">Сохранить</Button>
<Button kind="secondary">Отмена</Button>
</ButtonSet>
В этом примере кнопки будут располагаться в одну линию, следуя
дизайну Carbon. kind="primary" делает кнопку основной, а
kind="secondary" — вторичной.
Вертикальная группировка кнопок
<ButtonSet stacked>
<Button kind="primary">Применить</Button>
<Button kind="secondary">Очистить</Button>
<Button kind="danger">Удалить</Button>
</ButtonSet>
Использование свойства stacked переводит кнопки в
вертикальное расположение, что полезно для узких колонок или панелей
инструментов.
ButtonSet хорошо сочетается с компонентами форм, диалогов и панелей. Например, в модальных окнах можно использовать ButtonSet для аккуратного размещения кнопок действий:
<Modal>
<ModalHeader title="Подтвердите действие" />
<ModalBody>
<p>Вы действительно хотите удалить выбранные элементы?</p>
</ModalBody>
<ModalFooter>
<ButtonSet>
<Button kind="secondary">Отмена</Button>
<Button kind="danger">Удалить</Button>
</ButtonSet>
</ModalFooter>
</Modal>
Это обеспечивает визуальное соответствие Carbon Design System и поддерживает правильное распределение пространства между кнопками.
В реальных проектах часто требуется генерировать кнопки динамически
на основе данных. В Svelte это легко реализуется через цикл
{#each}:
<script>
import { ButtonSet, Button } from 'carbon-components-svelte';
const actions = [
{ label: 'Сохранить', kind: 'primary' },
{ label: 'Отмена', kind: 'secondary' },
{ label: 'Удалить', kind: 'danger' }
];
</script>
<ButtonSet stacked>
{#each actions as action}
<Button kind={action.kind}>{action.label}</Button>
{/each}
</ButtonSet>
Такой подход позволяет централизованно управлять набором кнопок, добавлять или удалять действия без изменения структуры DOM.
Компонент ButtonSet поддерживает расширенную стилизацию через CSS-классы:
.bx--btn-set — основной контейнер..bx--btn-set--stacked — применяется при вертикальном
расположении кнопок.class на каждом Button.Пример кастомного стиля:
<style>
.custom-btn-set {
gap: 1rem; /* увеличиваем расстояние между кнопками */
}
</style>
<ButtonSet class="custom-btn-set">
<Button kind="primary">Да</Button>
<Button kind="secondary">Нет</Button>
</ButtonSet>
stacked оправдано только при
ограниченном пространстве или для мобильного интерфейса.{#each}, чтобы Svelte
корректно обновлял DOM.ButtonSet в Carbon Components Svelte является мощным инструментом для организации кнопок и поддерживает все основные принципы дизайн-системы Carbon, обеспечивая визуальное единообразие, доступность и удобство работы с динамическими интерфейсами.