Примитивы
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" и когда это главная кнопка экрана, и когда это последнее слово в строке списка. |
| loading | boolean | false | Идёт работа: кнопка становится 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" и когда это главная кнопка экрана, и когда это последнее слово в строке списка. |
| loading | boolean | false | Идёт работа: кнопка становится 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" и когда это главная кнопка экрана, и когда это последнее слово в строке списка. |
| loading | boolean | false | Идёт работа: кнопка становится 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