Интерактивные теги (Tag) с возможностью закрытия — это компонент пользовательского интерфейса, позволяющий отображать элементы данных, которые можно динамически удалять. В Carbon Components Svelte они реализованы с акцентом на доступность, наглядность и гибкость в кастомизации.
Компонент тега с закрытием в Svelte импортируется из библиотеки следующим образом:
<script>
import { Tag } from 'carbon-components-svelte';
let tags = [
{ id: 1, label: 'Svelte', type: 'red' },
{ id: 2, label: 'JavaScript', type: 'green' },
{ id: 3, label: 'UI', type: 'blue' }
];
function removeTag(id) {
tags = tags.filter(tag => tag.id !== id);
}
</script>
В JSX-подобной разметке Svelte компонент используется через цикл:
{#each tags as tag (tag.id)}
<Tag type={tag.type} on:close={() => removeTag(tag.id)} closeButton={true}>
{tag.label}
</Tag>
{/each}
Ключевые моменты:
type — задаёт цветовой стиль тега (например,
'red', 'green', 'blue').closeButton — включает кнопку закрытия. По умолчанию
кнопка скрыта.on:close активируется при нажатии на кнопку
закрытия.Carbon Components Svelte предоставляет несколько стандартных стилей для тегов:
Пример динамического изменения цвета:
<Tag type={tag.type} on:close={() => removeTag(tag.id)}>
{tag.label}
</Tag>
Цвет можно менять программно, например, на основе состояния:
tag.type = tag.completed ? 'green' : 'blue';
Событие закрытия (on:close) является основным для
интерактивных тегов. Оно возвращает стандартный объект события Svelte,
что позволяет:
Пример с анимацией:
{#each tags as tag (tag.id)}
<Tag
type={tag.type}
on:close={() => {
tags = tags.filter(t => t.id !== tag.id);
}}
closeButton={true}
transition:fade={{ duration: 200 }}
>
{tag.label}
</Tag>
{/each}
Использование transition:fade плавно скрывает тег,
улучшая UX.
Компонент Tag из Carbon автоматически поддерживает базовые атрибуты доступности:
aria-label="Remove tag".aria-label для кастомной
подписи:<Tag
type="green"
closeButton={true}
aria-label="Удалить тег Svelte"
on:close={() => removeTag(tag.id)}
>
Svelte
</Tag>
Это позволяет поддерживать экранные читалки и соблюдает рекомендации WCAG.
Добавление новых тегов осуществляется простым изменением массива
tags. Пример с вводом пользователя:
<script>
let inputValue = '';
function addTag() {
if (inputValue.trim() !== '') {
tags = [...tags, { id: Date.now(), label: inputValue, type: 'blue' }];
inputValue = '';
}
}
</script>
<input type="text" bind:value={inputValue} placeholder="Новый тег" />
<button on:click={addTag}>Добавить</button>
Интерактивный массив тегов позволяет комбинировать добавление и удаление в реальном времени, обеспечивая динамичный интерфейс.
Теги могут использоваться вместе с другими компонентами Carbon, например:
Пример сочетания с Tooltip:
<Tag type="green" closeButton={true} on:close={() => removeTag(tag.id)}>
<Tooltip content="Это тег Svelte">{tag.label}</Tooltip>
</Tag>
id для тегов в цикле
{#each}.type для визуальной
категоризации.aria-label для кнопки закрытия для
доступности.Интерактивные теги с закрытием — мощный инструмент для управления набором меток, тегов или категорий в приложениях на Svelte с Carbon Components. Они объединяют простоту использования, гибкость кастомизации и встроенную поддержку доступности, позволяя строить современные интерфейсы без лишнего кода.