StepWizard
Шапка пошагового мастера с отметкой текущего шага. Содержимое шагов — на вас.
- Install
- Theme
- Ship
Install
One package, plus the stylesheet. Nothing to configure yet.
- Install
- Theme
- Ship
Install
One package, plus the stylesheet. Nothing to configure yet.
- Install
- Theme
- Ship
Install
One package, plus the stylesheet. Nothing to configure yet.
- Install
- Theme
- Ship
Install
One package, plus the stylesheet. Nothing to configure yet.
Код
import { useState } from 'react';
import { Button, Card, Group, Stack, Typography } from '@ilomee/aura-react';
import { StepWizard, type WizardStep } from '@ilomee/aura-react';
const STEPS: (WizardStep & { body: string })[] = [
{ id: 'install', label: 'Install', body: 'One package, plus the stylesheet. Nothing to configure yet.' },
{ id: 'theme', label: 'Theme', body: 'Theme, accent, corners and density are four attributes on the root.' },
{ id: 'ship', label: 'Ship', body: 'Nothing else to set up — the classes are the API from here.' },
];
// Мастер — это шапка: маркер на каждый шаг и указание, на каком вы сейчас. Что представляет собой
// сам шаг — панель ниже — принадлежит вызывающему, поэтому рецепт её и не принимает.
export default function Demo() {
const [active, setActive] = useState(0);
const step = STEPS[active]!;
return (
<Stack gap={4} style={{ width: '100%' }}>
<StepWizard steps={STEPS} active={active} />
<Card>
<Stack gap={1}>
<Typography variant="h3">{step.label}</Typography>
<Typography variant="body" tone="muted">
{step.body}
</Typography>
</Stack>
</Card>
<Group>
<Button onClick={() => setActive((s) => Math.max(0, s - 1))} disabled={active === 0}>
Back
</Button>
<Button
variant="primary"
onClick={() => setActive((s) => Math.min(STEPS.length - 1, s + 1))}
disabled={active === STEPS.length - 1}
>
Next
</Button>
</Group>
</Stack>
);
}<StepWizard :steps="steps" :active="active">
<p>Step body</p>
</StepWizard>Контентные пропсы принимают строку. Для разметки используйте одноимённый слот.
<StepWizard {steps} {active}>
<p>Step body</p>
</StepWizard>Контентные пропсы принимают строку либо сниппет.
Используется как aura-step-wizard.
<aura-step-wizard [steps]="steps" [active]="active">
<p>Step body</p>
</aura-step-wizard>Контентные входы принимают строку либо TemplateRef.
Пропсы
| Имя | Тип | По умолчанию | Примечания |
|---|---|---|---|
| renderStep | (step, state, index) => ReactNode | — | Отрисуйте внутренности шага — иконку вместо номера, длительность под подписью. <li> остаётся нашим: на нём data-state и aria-current="step". |
| steps* | WizardStep[] | — | { id, label }. |
| active | number | 0 | |
| childrenслот | ReactNode | — |
| Имя | Тип | По умолчанию | Примечания |
|---|---|---|---|
| stepслот | { step: WizardStep; state: StepState; index: number } | — | |
| steps* | WizardStep[] | — | |
| active | number | 0 | |
| defaultслот | Slot | — |
| Имя | Тип | По умолчанию | Примечания |
|---|---|---|---|
| stepслот | Snippet<[WizardStep, StepState, number]> | — | |
| steps* | WizardStep[] | — | |
| active | number | 0 | |
| childrenслот | Snippet | — |
| Имя | Тип | По умолчанию | Примечания |
|---|---|---|---|
| stepTemplate | TemplateRef<{ $implicit: WizardStep; state: StepState; index: number }> | — | |
| steps* | WizardStep[] | — | |
| active | number | 0 | |
| ng-contentслот | content | — |
Какие классы отдаёт
Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.
| Класс | Роль | Примечания |
|---|---|---|
| .aura-wizard | база | Обязательный. Без него модификатор не работает. |
| .aura-wizard__steps | элемент | |
| .aura-wizard__step[data-state] | элемент | |
| .aura-wizard__marker | элемент | |
| .aura-wizard__label | элемент | |
| .aura-wizard__body | элемент |