Рецепты
04

FormDialog

Модальная форма с ловушкой фокуса и закрытием по Escape, на оверлее [data-state] из слоя анимаций.

отрендерил aura-react
отрендерил aura-react
отрендерил aura-react
отрендерил aura-react
отрендерил aura-react

Код

Demo.tsx
import { useState } from 'react';
import { Button, Dialog, Field, Group } from '@ilomee/aura-react';

// Форма в модалке — это Dialog с формой внутри. `Dialog` владеет затемнением, ловушкой фокуса,
// блокировкой прокрутки и Escape; форма и две кнопки — та часть, которая всегда была специфична для
// конкретного экрана, поэтому рецепт вокруг них стал примером, а не компонентом.
export default function Demo() {
  const [open, setOpen] = useState(true);
  const [name, setName] = useState('');

  return (
    <>
      <Button variant="primary" onClick={() => setOpen(true)}>
        New workspace
      </Button>
      <Dialog
        open={open}
        onClose={() => setOpen(false)}
        title="New workspace"
        autoFocus={false}
        withCloseButton
      >
        <form
          onSubmit={(e) => {
            e.preventDefault();
            setOpen(false);
          }}
        >
          <Field label="Name" value={name} onValueChange={setName} placeholder="Acme" />
          <Group style={{ marginTop: 20, justifyContent: 'flex-end' }}>
            <Button type="button" onClick={() => setOpen(false)}>
              Cancel
            </Button>
            <Button type="submit" variant="primary" disabled={!name}>
              Create
            </Button>
          </Group>
        </form>
      </Dialog>
    </>
  );
}

Это пример, а не компонент: его не поставляет ни один пакет и импортировать нечего. Он собран из примитивов, которые есть во всех четырёх пакетах, поэтому та же композиция работает в любом стеке — скопируйте её в свой компонент, и дальше она ваша.

Пропсы

Пропсов нет: композиция принимает то, что вы передадите примитивам внутри неё. Их пропсы — на их собственных страницах.

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

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

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