Примитивы
02

Button

Кнопка. Две независимые оси: variant решает, как применён цвет — заливка (primary), обводка (secondary), голая подпись в коробке высотой с контрол (ghost) или без неё (text), — а tone решает, каким цветом, из тех же двенадцатиступенчатых шкал, что читают бейджи и алерты. Пробрасывает все нативные атрибуты кнопки.

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

Код

index.html
<div class="aura-stack" style="--aura-dir:column;--aura-gap:var(--space-4);">
  <div class="aura-group" style="--aura-gap:var(--space-3);">
    <button type="button" class="aura-btn aura-btn--primary">Primary</button>
    <button type="button" class="aura-btn aura-btn--secondary">Secondary</button>
    <button type="button" class="aura-btn aura-btn--ghost">Ghost</button>
    <button type="button" class="aura-btn aura-btn--text">Text</button>
    <button type="button" class="aura-btn aura-btn--primary" disabled>Disabled</button>
    <button type="button" class="aura-btn aura-btn--primary aura-btn--loading" disabled aria-busy="true">Saving</button>
  </div>
  <div class="aura-group" style="--aura-gap:var(--space-3);">
    <button type="button" class="aura-btn aura-btn--primary aura-btn--danger">Delete</button>
    <button type="button" class="aura-btn aura-btn--secondary aura-btn--danger">Delete</button>
    <button type="button" class="aura-btn aura-btn--text aura-btn--danger">Delete</button>
    <button type="button" class="aura-btn aura-btn--primary aura-btn--warning">Archive</button>
    <button type="button" class="aura-btn aura-btn--primary aura-btn--success">Approve</button>
  </div>
</div>
Demo.tsx
import { Button, Group, Stack } from '@ilomee/aura-react';

/**
 * Два ряда, потому что осей две. В первом меняется `variant` при одном тоне, во втором — `tone`, и
 * один и тот же тон показан в трёх вариантах: это то, чего не скажет таблица пропов, — «Удалить»
 * остаётся одним и тем же красным и когда это главная кнопка, и когда это последнее слово в строке.
 */
export default function Demo() {
  return (
    <Stack gap={4}>
      <Group>
        <Button variant="primary">Primary</Button>
        <Button variant="secondary">Secondary</Button>
        <Button variant="ghost">Ghost</Button>
        <Button variant="text">Text</Button>
        <Button variant="primary" disabled>
          Disabled
        </Button>
        <Button variant="primary" loading>
          Saving
        </Button>
      </Group>
      <Group>
        <Button variant="primary" tone="danger">
          Delete
        </Button>
        <Button variant="secondary" tone="danger">
          Delete
        </Button>
        <Button variant="text" tone="danger">
          Delete
        </Button>
        <Button variant="primary" tone="warning">
          Archive
        </Button>
        <Button variant="primary" tone="success">
          Approve
        </Button>
      </Group>
    </Stack>
  );
}
Demo.vue
<script setup lang="ts">
import { Button } from '@ilomee/aura-vue';
</script>

<template>
  <Button variant="primary" @click="save">Save</Button>
  <Button variant="ghost">Cancel</Button>
  <Button variant="text" tone="danger" @click="remove">Delete</Button>
</template>

Рендерит type="button"; переопределяется через проброс атрибутов.

Demo.svelte
<script lang="ts">
  import { Button } from '@ilomee/aura-svelte';
</script>

<Button variant="primary" onclick={save}>Save</Button>
<Button variant="ghost">Cancel</Button>
<Button variant="text" tone="danger" onclick={remove}>Delete</Button>

Используется как button[auraButton].

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

@Component({
  standalone: true,
  imports: [AuraButton],
  template: `
    <button auraButton variant="primary" (click)="save()">Save</button>
    <button auraButton variant="ghost">Cancel</button>
    <button auraButton variant="text" tone="danger" (click)="remove()">Delete</button>
  `,
})
export class DemoComponent {}

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
variant'primary' | 'secondary' | 'ghost' | 'text''secondary'Как применён цвет. text вдобавок снимает высоту контрола — это то, что нужно кнопке в конце плотной строки списка и чего ghost не даёт.
size'sm' | 'md' | 'lg''md'Три высоты из токенов --control-h-*, которые читают поля ввода: кнопка рядом с полем той же высоты, что и поле.
tone'default' | 'accent' | 'success' | 'warning' | 'danger' | 'info''default'Цвет, независимо от variant: variant говорит «заливка / обводка / без фона», tone — каким цветом. Опасное действие остаётся tone="danger" и когда это главная кнопка экрана, и когда это последнее слово в строке списка.
loadingbooleanfalseИдёт работа: кнопка становится disabled и aria-busy и получает спиннер перед подписью. Рядом со словами, а не вместо них, — чтобы кнопка не меняла ширину ровно в тот момент, когда перестаёт быть нажимаемой.
type'button' | 'submit' | 'reset''button'
…ButtonHTMLAttributesатрибутыButtonHTMLAttributes<HTMLButtonElement>Пробрасываются на кнопку.
ИмяТипПо умолчаниюПримечания
variant'primary' | 'secondary' | 'ghost' | 'text''secondary'
size'sm' | 'md' | 'lg''md'
tone'default' | 'accent' | 'success' | 'warning' | 'danger' | 'info''default'Цвет, независимо от variant: variant говорит «заливка / обводка / без фона», tone — каким цветом. Опасное действие остаётся tone="danger" и когда это главная кнопка экрана, и когда это последнее слово в строке списка.
loadingbooleanfalseИдёт работа: кнопка становится disabled и aria-busy и получает спиннер перед подписью. Рядом со словами, а не вместо них, — чтобы кнопка не меняла ширину ровно в тот момент, когда перестаёт быть нажимаемой.
defaultслотSlot
ИмяТипПо умолчаниюПримечания
variant'primary' | 'secondary' | 'ghost' | 'text''secondary'
size'sm' | 'md' | 'lg''md'
tone'default' | 'accent' | 'success' | 'warning' | 'danger' | 'info''default'Цвет, независимо от variant: variant говорит «заливка / обводка / без фона», tone — каким цветом. Опасное действие остаётся tone="danger" и когда это главная кнопка экрана, и когда это последнее слово в строке списка.
childrenслотSnippet
…restатрибутыHTMLButtonAttributes
ИмяТипПо умолчаниюПримечания
variant'primary' | 'secondary' | 'ghost' | 'text''secondary'
size'sm' | 'md' | 'lg''md'
tone'default' | 'accent' | 'success' | 'warning' | 'danger' | 'info''default'Цвет, независимо от variant: variant говорит «заливка / обводка / без фона», tone — каким цветом. Опасное действие остаётся tone="danger" и когда это главная кнопка экрана, и когда это последнее слово в строке списка.
loadingbooleanfalseИдёт работа: кнопка становится disabled и aria-busy и получает спиннер перед подписью. Рядом со словами, а не вместо них, — чтобы кнопка не меняла ширину ровно в тот момент, когда перестаёт быть нажимаемой.

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

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

КлассРольПримечания
.aura-btnбазаОбязательный. Без него модификатор не работает.
.aura-btn--primaryмодификатор
.aura-btn--secondaryмодификатор
.aura-btn--ghostмодификатор
.aura-btn--textмодификатор
.aura-btn--smмодификатор
.aura-btn--lgмодификатор
.aura-btn--loadingмодификатор
.aura-btn--accentмодификатор
.aura-btn--successмодификатор
.aura-btn--warningмодификатор
.aura-btn--dangerмодификатор
.aura-btn--infoмодификатор

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

components.css
высота
var(--control-h) · sm var(--control-h-sm) · lg var(--control-h-lg)
паддинг
0 18px · sm 0 12px · lg 0 24px · literal
радиус
var(--r2)
шрифт
700 14px var(--font)
primary
var(--gradient) · #fff · var(--shadow-2)
secondary
var(--surface) · var(--border) · var(--shadow-1)
ghost
transparent · var(--text-muted)
text
height auto · padding 0 · underline on hover
заливка тона
var(--<tone>-solid) · hover var(--<tone>-solid-hover)
обводка тона
var(--<tone>-border)
текст тона
var(--<tone>-text) · over a fill: derived from its oklch lightness
подложка тона
var(--<tone>-bg-hover)
hover
translateY(-1px) · brightness(1.05), untoned only
disabled
var(--opacity-disabled)
спиннер
1em · currentColor · ::before · aura-spin 1s