Формы, которыми компонент быть не может, потому что они оборачивают тело, известное только вызывающему: карточка раздела, сетка данных, раскрывающееся меню и собственная обвязка каркасов. tokens.css поставляет классы, а разметку пишет приложение. Всё, что ниже, — разметка, которую возвращает ui.Styleguide, со словами на вашем языке, и именно эту разметку тесты ui сверяют с tokens.css.
Каждый пример работает, но его ссылки никуда не ведут.
box
Карточка раздела с отступами и заголовок, который стоит вне её.
Какая карточка какая
У rst-list и rst-card намеренно нет отступов: они держат череду строк, а каждая строка отбивает себя сама. Положите внутрь форму, абзац, полосу ссылок или что угодно, что не строка, и это отрисуется вплотную к границе; текст, касающийся края, и есть примета. Карточка с отступами для произвольного содержимого: rst-box, а её заголовок стоит перед ней соседним rst-box-head.
<divrst-box-head>
<h2>Выплата</h2>
<arst-btnhref="/payout/edit">Изменить</a>
</div>
<sectionrst-box>
<p>Всё на экране находится внутри блоков.</p>
<divrst-box-foot>Обновлено 2 часа назад</div>
</section>
button
Кнопки бывают четырёх видов и трёх размеров, а ссылка может выглядеть как кнопка. Индикатор, который форма показывает во время отправки, смотрите в form-foot.
Настоящий словарь таблиц данных: карточка задаёт колонки один раз, строки только выбирают ячейки.
Экраны складываются по вертикали
Экран — это столбец: page-header, затем section-header и карточка, затем следующий section-header и карточка, в порядке чтения. Горизонтальная раскладка оставлена тем приёмам, которые её несут: rst-box-head, rst-field-row, rst-lbar, ячейки rst-lrow, rst-seg-tabs.
<divrst-cardstyle="--rst-cols: 2fr 110px var(--rst-col-menu)">
<divrst-lrow="head">
<span>Заказ</span>
<spanclass="rst-m-hide">Статус</span>
<span></span>
</div>
<divrst-lrow>
<aclass="rst-nm"href="/orders/AB3PX"><bdi>Grace Hopper</bdi>
<small>AB3PX · <bdi>grace@example.com</bdi></small>
</a>
<spanclass="rst-m-hide rst-cell-mut">Оплачено</span>
<detailsrst-row-menuname="rst-menus">
<summaryaria-label="Действия для Grace Hopper">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><circlecx="12"cy="12"r="1"/><circlecx="12"cy="5"r="1"/><circlecx="12"cy="19"r="1"/></svg>
</summary>
<divrst-row-menu-panel>
<ahref="/orders/AB3PX">Открыть</a>
<hr>
<aclass="rst-danger"href="/orders/AB3PX/refund">Вернуть деньги за заказ…</a>
</div>
</details>
</div>
<prst-no-match>Подходящих заказов нет. <ahref="/orders">Сбросить фильтры</a></p>
</div>
<prst-count-line>Показаны <strong>1–20</strong> из <strong>412</strong></p>
modal
У модального окна есть собственный URL, а не состояние на клиенте: страница под ним помечена inert, панель над ней и обычная ссылка, чтобы закрыть.
<divrst-backdropinert>
<divrst-page>
<h1>Настройки</h1>
</div>
</div>
<divrst-modal-overlay>
<dialogrst-modal-panelopenaria-labelledby="modal-title">
<nav>
<ahref="/settings/profile"aria-current="page">Профиль</a>
<ahref="/settings/billing">Оплата</a>
<ahref="/settings/notifications">Уведомления</a>
</nav>
<section>
<arst-modal-closehref="/settings"aria-label="Закрыть настройки">✕</a>
<h2id="modal-title">Профиль</h2>
<p>Измените имя и фото, которые показываются по всему аккаунту.</p>
</section>
</dialog>
</div>
Карточка с рамкой, тело которой раскрывается только при включённом переключателе, через :has(). Главное — переключатель; раскрытие лишь удобство отображения.
<divrst-tblock>
<labelrst-tblock-head>
<inputtype="checkbox"name="notify"checked>
<spanrst-switch-trackaria-hidden="true"></span>
<span>
<spanrst-tblock-title>Уведомления по почте</span>
<spanrst-tblock-desc>Приходят на каждый ответ в обсуждении, где вы участвуете.</span>
</span>
</label>
<divrst-tblock-body>
<divrst-field>
<labelrst-field-labelfor="notify-freq">Частота</label>
<inputrst-inputtype="text"id="notify-freq"name="notify_freq"value="Ежедневная сводка">
</div>
</div>
</div>