IBM Carbon Design System — это полноценный набор компонентов, стилей и утилит для построения интерфейсов, ориентированных на корпоративные приложения. Он включает UI-компоненты, сетки, типографику, цвета, иконки и шаблоны взаимодействия, обеспечивая единый язык дизайна и предсказуемое поведение элементов.
Основные цели Carbon:
Carbon разделён на несколько ключевых модулей:
Carbon Components Содержит готовые React- или Web-компоненты, которые можно интегрировать напрямую в проект. Компоненты включают:
Button — различные типы кнопок (primary,
secondary, tertiary) с поддержкой состояний
(hover, active, disabled).TextInput и Select — поля ввода с
встроенной валидацией и поддержкой форматов.DataTable — таблицы с сортировкой, пагинацией и
фильтрацией.Modal и SidePanel — диалоговые окна и
боковые панели для отображения контекстной информации.Carbon Styles Содержит SCSS-переменные, миксины и токены для настройки визуального вида компонентов. Основные категории:
Carbon Utilities Набор вспомогательных функций для работы с сеткой, отступами, позиционированием и адаптивными точками. Например:
spacing() — генерация классов и переменных
отступов.breakpoints() — автоматическое управление стилями для
разных размеров экранов.Carbon Motion Паттерны анимации и переходов для компонентов, включая эффекты появления, закрытия и переключения состояний.
SvelteKit не имеет официальной версии Carbon, но интеграция возможна через Web Components или адаптированные пакеты. Основные подходы:
npm install @carbon/web-components
Импорт необходимых компонентов в Svelte:
<script>
import '@carbon/web-components/es/components/button/button.js';
</script>
<bx-btn kind="primary">Primary Button</bx-btn>
Для корректного отображения подключаются SCSS-файлы или CSS из пакета:
@import '@carbon/web-components/es/styles.css';
Поддерживаются темы (white, g100,
g90) через атрибут theme.
Web Components Carbon имеют встроенные свойства для адаптивной верстки:
bx-grid — контейнер сетки с колонками и отступами.bx-row и bx-col — определяют распределение
контента в строках и колонках.Пример адаптивной сетки:
<bx-grid>
<bx-row>
<bx-col cols="4">Контент 1</bx-col>
<bx-col cols="8">Контент 2</bx-col>
</bx-row>
</bx-grid>
Carbon Web Components поддерживают кастомные события для взаимодействия:
<bx-btn id="myBtn" kind="primary">Click Me</bx-btn>
<script>
const button = document.getElementById('myBtn');
button.addEventListener('click', () => {
console.log('Кнопка нажата');
});
</script>
Состояния компонентов можно управлять через атрибуты:
disabled — блокирует элемент.open — для модальных окон и раскрывающихся
панелей.selected — для элементов списка или табов.Carbon поддерживает кастомизацию через CSS-переменные и SCSS-миксины:
$cds-gray-100: #f4f4f4;
$cds-blue-60: #0f62fe;
:root {
--cds-interactive-01: #ff7f50;
}
@use '@carbon/styles' with (
$body-font-size: 16px,
$heading-font-weight: 600
);
Carbon включает расширенные компоненты для управления данными:
DataTable с сортировкой и фильтрацией:<bx-data-table>
<bx-table-header>
<bx-table-header-row>
<bx-table-header-cell>Имя</bx-table-header-cell>
<bx-table-header-cell>Возраст</bx-table-header-cell>
</bx-table-header-row>
</bx-table-header>
<bx-table-body>
<bx-table-row>
<bx-table-cell>Иван</bx-table-cell>
<bx-table-cell>28</bx-table-cell>
</bx-table-row>
</bx-table-body>
</bx-data-table>
<bx-text-input label-text="Email" type="email" required pattern=".+@.+\..+"></bx-text-input>
Использование этих принципов позволяет создавать интерфейсы, которые соответствуют корпоративным стандартам и легко масштабируются.
src/
├─ routes/
│ └─ index.svelte
├─ lib/
│ ├─ components/
│ │ └─ CustomButton.svelte
│ └─ styles/
│ └─ carbon.scss
└─ app.html
lib/components — собственные Svelte-компоненты на
основе Carbon.lib/styles/carbon.scss — SCSS-файлы с настройкой темы и
переопределением переменных.routes/index.svelte — страница с использованием
компонентов Carbon.Такой подход обеспечивает чистую архитектуру, упрощает поддержку и расширение интерфейсов.