Примитивы
40

StepWizard

Шапка пошагового мастера с отметкой текущего шага. Содержимое шагов — на вас.

отрендерил aura-react
отрендерил aura-react
отрендерил aura-vue
отрендерил aura-svelte
собрано из классов самого aura-angular
  1. Install
  2. Theme
  3. Ship

Install

One package, plus the stylesheet. Nothing to configure yet.

  1. Install
  2. Theme
  3. Ship

Install

One package, plus the stylesheet. Nothing to configure yet.

  1. Install
  2. Theme
  3. Ship

Install

One package, plus the stylesheet. Nothing to configure yet.

  1. Install
  2. Theme
  3. Ship

Install

One package, plus the stylesheet. Nothing to configure yet.

Код

Рецепт — это композиция примитивов, а не один элемент, поэтому единого сниппета нет. Соберите его из классов ниже или откройте примитивы, из которых он состоит.
Demo.tsx
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>
  );
}
Demo.vue
<StepWizard :steps="steps" :active="active">
  <p>Step body</p>
</StepWizard>

Контентные пропсы принимают строку. Для разметки используйте одноимённый слот.

Demo.svelte
<StepWizard {steps} {active}>
  <p>Step body</p>
</StepWizard>

Контентные пропсы принимают строку либо сниппет.

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

demo.component.ts
<aura-step-wizard [steps]="steps" [active]="active">
  <p>Step body</p>
</aura-step-wizard>

Контентные входы принимают строку либо TemplateRef.

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
renderStep(step, state, index) => ReactNodeОтрисуйте внутренности шага — иконку вместо номера, длительность под подписью. <li> остаётся нашим: на нём data-state и aria-current="step".
steps*WizardStep[]{ id, label }.
activenumber0
childrenслотReactNode
ИмяТипПо умолчаниюПримечания
stepслот{ step: WizardStep; state: StepState; index: number }
steps*WizardStep[]
activenumber0
defaultслотSlot
ИмяТипПо умолчаниюПримечания
stepслотSnippet<[WizardStep, StepState, number]>
steps*WizardStep[]
activenumber0
childrenслотSnippet
ИмяТипПо умолчаниюПримечания
stepTemplateTemplateRef<{ $implicit: WizardStep; state: StepState; index: number }>
steps*WizardStep[]
activenumber0
ng-contentслотcontent

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

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

КлассРольПримечания
.aura-wizardбазаОбязательный. Без него модификатор не работает.
.aura-wizard__stepsэлемент
.aura-wizard__step[data-state]элемент
.aura-wizard__markerэлемент
.aura-wizard__labelэлемент
.aura-wizard__bodyэлемент