Carbon Components Svelte — это библиотека пользовательских интерфейсов, реализующая компоненты IBM Carbon Design System с использованием Svelte. Основная цель при работе с этой библиотекой — улучшение структуры кода, повышение его читаемости и снижение дублирования за счёт переиспользуемых компонентов.
Для начала необходимо установить библиотеку и подключить базовые стили:
npm install carbon-components-svelte
import 'carbon-components-svelte/css/all.css';
После подключения стилей и компонентов можно использовать их в проекте. Например, компонент кнопки:
<script>
import { Button } from 'carbon-components-svelte';
</script>
<Button kind="primary" on:click={() => console.log('Clicked')}>
Нажми меня
</Button>
При рефакторинге существующего кода важно выделять повторяющиеся UI-блоки в отдельные Svelte-компоненты. Это снижает дублирование и упрощает поддержку.
Пример выделения формы с полями ввода в отдельный компонент:
<!-- InputForm.svelte -->
<script>
import { TextInput, Button } from 'carbon-components-svelte';
export let onSubmit;
let inputValue = '';
</script>
<form on:submit|preventDefault={() => onSubmit(inputValue)}>
<TextInput bind:value={inputValue} labelText="Введите значение" />
<Button type="submit" kind="primary">Отправить</Button>
</form>
Использование в основном компоненте:
<InputForm onSub mit={value => console.log(value)} />
Svelte обеспечивает реактивность через переменные и $:
декларации. При рефакторинге важно избегать состояния, привязанного к
DOM напрямую, вместо этого использовать реактивные
переменные:
<script>
import { Checkbox } from 'carbon-components-svelte';
let isChecked = false;
$: status = isChecked ? 'Включено' : 'Выключено';
</script>
<Checkbox bind:checked={isChecked} labelText="Активировать" />
<p>{status}</p>
Carbon Components Svelte поддерживает стандартные DOM-события, а также позволяет создавать кастомные события для передачи данных из дочерних компонентов:
<!-- ChildComponent.svelte -->
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
function handleClick() {
dispatch('customClick', { message: 'Данные из дочернего компонента' });
}
</script>
<Button on:click={handleClick}>Отправить событие</Button>
<!-- ParentComponent.svelte -->
<ChildComponent on:customClick={event => console.log(event.detail.message)} />
Для компонентов Carbon, таких как карточки или панели, Svelte-слоты позволяют вставлять любое содержимое, сохраняя стили и структуру:
<Card>
<h3 slot="title">Заголовок карточки</h3>
<p slot="content">Содержимое карточки можно менять динамически</p>
<Button slot="footer" kind="secondary">Действие</Button>
</Card>
Это позволяет строить универсальные компоненты, которые можно использовать в разных местах приложения.
Carbon Components Svelte поддерживает стандартные CSS-переменные и классы для тем. Рефакторинг кода часто включает переход от inline-стилей к CSS-переменным, что облегчает поддержку и изменения дизайна:
:root {
--cds-background: #f4f4f4;
--cds-text-primary: #161616;
}
.card-custom {
background-color: var(--cds-background);
color: var(--cds-text-primary);
padding: 1rem;
}
<Card class="card-custom">
<p>Пример кастомного стиля</p>
</Card>
При работе с Carbon Components важно минимизировать
ререндеринг компонентов. Использование bind: и
реактивных выражений позволяет Svelte отслеживать изменения данных и
обновлять только необходимые части DOM.
Для списков и таблиц рекомендуется использовать #each с
уникальными ключами:
{#each items as item (item.id)}
<DataTableRow {item} />
{/each}
Это предотвращает полное пересоздание DOM-элементов при изменении данных и ускоряет работу интерфейса.
Эффективный рефакторинг подразумевает разделение проекта на модули:
components/ — отдельные переиспользуемые UI-блокиcontainers/ — компоненты, объединяющие логику и
несколько UI-компонентовstores/ — глобальные и локальные состоянияutils/ — вспомогательные функции и константыТакой подход облегчает тестирование, поддержку и масштабирование приложения.
Этот подход к использованию Carbon Components Svelte в сочетании с принципами модульного дизайна, реактивности и переиспользуемости компонентов обеспечивает чистый, поддерживаемый и производительный код.