Примитивы
06

Chip

Тег, при желании — удаляемый. Крестик идёт вместе с компонентом; событие удаления во всех четырёх библиотеках называется по-своему.

чистая разметка — библиотеки на странице нет
отрендерил aura-react
отрендерил aura-vue
отрендерил aura-svelte
собрано из классов самого aura-angular
design tokens css a11y small
designtokenscssa11ysmall
design tokens css a11y small
designtokenscssa11ysmall
designtokenscssa11ysmall

Код

index.html
<div class="aura-group" style="--aura-gap:var(--space-3);">
  <span class="aura-chip">design
  <button type="button" class="aura-chip__remove" aria-label="Remove design">
    <svg viewBox="0 0 8 8" aria-hidden="true">
      <path d="M1 1l6 6M7 1l-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
    </svg>
  </button>
</span>
<span class="aura-chip">tokens
<button type="button" class="aura-chip__remove" aria-label="Remove tokens">
  <svg viewBox="0 0 8 8" aria-hidden="true">
    <path d="M1 1l6 6M7 1l-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
  </svg>
</button>
</span>
<span class="aura-chip">css
<button type="button" class="aura-chip__remove" aria-label="Remove css">
  <svg viewBox="0 0 8 8" aria-hidden="true">
    <path d="M1 1l6 6M7 1l-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
  </svg>
</button>
</span>
<span class="aura-chip">a11y
<button type="button" class="aura-chip__remove" aria-label="Remove a11y">
  <svg viewBox="0 0 8 8" aria-hidden="true">
    <path d="M1 1l6 6M7 1l-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
  </svg>
</button>
</span>
<span class="aura-chip aura-chip--sm">small</span>
</div>
Demo.tsx
import { useState } from 'react';
import { Chip, Group, Typography } from '@ilomee/aura-react';

export default function Demo() {
  const [tags, setTags] = useState(['design', 'tokens', 'css', 'a11y']);

  return (
    <Group>
      {tags.map((tag) => (
        <Chip key={tag} removable removeLabel={`Remove ${tag}`} onRemove={() => setTags((t) => t.filter((x) => x !== tag))}>
          {tag}
        </Chip>
      ))}
      <Chip size="sm">small</Chip>
      {tags.length === 0 && (
        <Typography variant="caption" tone="faint">
          All removed — reload to reset.
        </Typography>
      )}
    </Group>
  );
}
Demo.vue
<script setup lang="ts">
import { Chip } from '@ilomee/aura-vue';
</script>

<template>
  <Chip removable @remove="drop('ai')">ai</Chip>
</template>
Demo.svelte
<script lang="ts">
  import { Chip } from '@ilomee/aura-svelte';
</script>

<Chip removable onremove={() => drop('ai')}>ai</Chip>

Используется как aura-chip.

demo.component.ts
import { AuraChip } from '@ilomee/aura-angular';

@Component({
  standalone: true,
  imports: [AuraChip],
  template: `<aura-chip [removable]="true" (remove)="drop('ai')">ai</aura-chip>`,
})
export class DemoComponent {}

Это компонент (<aura-chip>), а не директива — в отличие от большей части Angular-пакета.

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
size'md' | 'sm''md'
removablebooleanfalse
onRemove() => voidСрабатывает по кнопке удаления.
removeLabelstring'Remove'Доступная подпись для кнопки удаления.
ИмяТипПо умолчаниюПримечания
size'md' | 'sm''md'
removablebooleanfalse
removeLabelstring'Remove'
removeсобытие() => voidЭмитится кнопкой удаления.
ИмяТипПо умолчаниюПримечания
size'md' | 'sm''md'
removablebooleanfalse
removeLabelstring'Remove'
onremove() => voidПроп-колбэк, а не событие.
ИмяТипПо умолчаниюПримечания
size'md' | 'sm''md'
removablebooleanfalse
removeLabelstring'Remove'
removeсобытиеEventEmitter<void>

Какие классы отдаёт

Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.

КлассРольПримечания
.aura-chipбазаОбязательный. Без него модификатор не работает.
.aura-chip--smмодификатор
.aura-chip__removeэлемент

Токены и правила

components.css
паддинг
7px 12px · literal
радиус
999px · literal
шрифт
600 12.5px var(--font)
рамка
1px solid var(--border)
hover
var(--accent)
кнопка ×
15×15 · var(--danger) на hover