Обёртка над компонентом — это промежуточный слой, позволяющий добавлять кастомную логику, адаптировать поведение и интерфейс Carbon-компонента под конкретные требования проекта. В Svelte такие обёртки создаются посредством создания нового Svelte-компонента, который инкапсулирует Carbon-компонент и управляет его свойствами и событиями.
Первый шаг при создании обёртки — импорт исходного компонента из
библиотеки carbon-components-svelte:
<script>
import { Button } from 'carbon-components-svelte';
</script>
Важно сохранять согласованность с именованием компонентов и их типами. Это позволяет избежать конфликтов и правильно использовать все доступные пропсы.
Обёртка должна принимать пропсы, которые будут передаваться внутреннему Carbon-компоненту, а также собственные пропсы для расширенной функциональности:
<script>
import { Button } from 'carbon-components-svelte';
export let label = 'Click me';
export let kind = 'primary';
export let onCl ick = () => {};
</script>
<Button {kind} on:click={onClick}>
{label}
</Button>
Здесь:
label управляет текстом кнопки,kind позволяет выбирать тип кнопки
(primary, secondary,
danger),onClick добавляет пользовательский обработчик
событий.Такой подход делает компонент универсальным и легко настраиваемым.
Для более сложных сценариев необходимо перехватывать события Carbon-компонентов и обрабатывать их внутри обёртки. Svelte предоставляет удобный синтаксис для биндинга событий:
<script>
import { TextInput } from 'carbon-components-svelte';
export let value = '';
export let placeholder = 'Введите текст';
function handleInput(event) {
value = event.detail.value;
dispatch('update', value);
}
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
</script>
<TextInput {value} {placeholder} on:input={handleInput} />
createEventDispatcher() позволяет обёртке испускать
собственные события.Обёртки позволяют централизованно управлять стилями компонентов, не изменяя их исходный код. Carbon использует CSS-переменные и классы, что делает кастомизацию гибкой:
<style>
.custom-button {
--cds-button-background: #0052cc;
--cds-button-color: #ffffff;
border-radius: 8px;
padding: 12px 24px;
}
</style>
<Button class="custom-button" {kind} on:click={onClick}>
{label}
</Button>
Использование классов и CSS-переменных позволяет легко интегрировать фирменный стиль приложения и обеспечивать единообразный дизайн.
Обёртки особенно полезны для объединения нескольких Carbon-компонентов в единый комплексный элемент:
<script>
import { TextInput, Button } from 'carbon-components-svelte';
export let inputValue = '';
let internalValue = inputValue;
function handleButtonClick() {
console.log('Отправка:', internalValue);
}
</script>
<div class="input-group">
<TextInput bind:value={internalValue} placeholder="Введите текст"/>
<Button kind="primary" on:click={handleButtonClick}>Отправить</Button>
</div>
<style>
.input-group {
display: flex;
gap: 8px;
}
</style>
Такой компонент объединяет ввод и кнопку, скрывая внутреннюю логику Carbon-компонентов от остальной части приложения.
Созданные обёртки можно использовать как строительные блоки для более крупных интерфейсов. Они позволяют:
Это упрощает поддержку и масштабирование проекта, уменьшая дублирование кода.
Создание обёрток над Carbon-компонентами в Svelte превращает библиотеку в гибкий инструмент для построения интерфейсов, позволяя адаптировать готовые элементы под любые требования приложения, сохраняя при этом их функциональность и стиль.