Ir para o conteúdo
Menu
Idioma, atualmente Português
EnglishGaeilge简体中文Españolहिन्दीPortuguêsবাংলাРусский日本語廣東話Tiếng Việtالعربية

sistema de design do rastrillo

Uma visão geral de tudo o que o sistema de design oferece. Tema: signal. Idioma: Português.

Ecrã de lista

Ecrã de lista genérico com título, barra de ferramentas e linhas que funcionam em computador e em telemóvel.

Elementos de interface já feitos e coerentes entre si, renderizados no servidor.

O vocabulário do próprio framework chama-lhes partials: ui.Templates() devolve partials e docs/site/templates.md documenta-os com esse nome. A palavra desta página mudou; a do código não.

As ligações aqui não estão ativas

Ligações inativas; o código do exemplo é fornecido.

Cada exemplo abaixo fica na sua própria moldura.

O conteúdo de exemplo está em inglês. Os invólucros de exemplo estão traduzidos.

page-header

A barra de título do ecrã: um h1, um subtítulo opcional e uma ação principal.

Título, subtítulo e uma ação principal

Pré-visualização
<header rst-page-header>
  <div rst-page-header-titles>
    <h1>Posts</h1>
    <p rst-page-header-sub>Everything you have written, newest first.</p>
  </div>
  <a rst-btn="primary" href="/posts/new"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="M12 5v14"/></svg>Write a post</a>
</header>

Só o título

Pré-visualização
<header rst-page-header>
  <div rst-page-header-titles>
    <h1>Settings</h1>
  </div>
</header>

list-bar

A barra de ferramentas no topo de um cartão de lista, com pesquisa e filtro.

Pesquisa com um menu de filtro

Pré-visualização
<div rst-list><div rst-lbar>
  <search><form rst-search method="get" action="/posts">
  <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
  <input type="search" name="q" value="release" placeholder="Search posts" aria-label="Search posts">
  <a rst-search-clear href="/posts?sort=newest" aria-label="Limpar a pesquisa"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg></a>
  <input type="hidden" name="sort" value="newest">
  <button class="rst-sr-only" type="submit">Pesquisar</button>
</form></search>
  <details rst-dropdown name="rst-menus">
  <summary rst-btn aria-label="Filter by status: Paid">Paid <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></summary>
  <div rst-dropdown-menu>
    <a href="/posts">All</a>
    <a href="/posts?status=paid" aria-current="true">Paid <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg></a>
    <a href="/posts?status=free">Free</a>
  </div>
</details>
</div></div>

list-search-submit

O verdadeiro botão de envio do formulário de pesquisa: escondido à vista, dentro da ordem de tabulação, e aparece quando recebe o foco do teclado.

Etiqueta por omissão

Pré-visualização
<section rst-box><button class="rst-sr-only" type="submit">Pesquisar</button></section>

Aqui não se vê nada até chegar com a tecla de tabulação.

list-row-action

Uma linha de lista: o nome do registo como ligação principal, uma linha de dados e uma ação secundária.

Marca inicial, estado e uma ação

Pré-visualização
<div rst-list><div rst-row>
  <span rst-row-lead data-lead="accent" aria-hidden="true">RN</span>
  <span rst-row-main><a href="/posts/1">Release notes, August</a><small rst-row-sub>Published 2 August · 4 min read</small></span>
  <span rst-status rst-tone="positive">Published</span>
  <a rst-row-action href="/posts/1/edit" aria-label="Edit Release notes, August">Edit</a>
</div></div>

Só o nome e a linha de detalhe

Pré-visualização
<div rst-list><div rst-row>
  <span rst-row-main><a href="/posts/2">Why we moved off the old runner</a><small rst-row-sub>Draft · saved 20 minutes ago</small></span>
</div></div>

seg-tabs

Um controlo segmentado de ligações renderizadas no servidor. O separador atual é aria-current numa ligação.

Duas secções

Pré-visualização
<nav rst-seg-tabs aria-label="Post sections"><a href="?tab=basics" aria-current="page">Basics</a><a href="?tab=advanced">Advanced</a></nav>

dropdown

Um desdobrável sem JavaScript nenhum: um botão summary sobre um painel de ligações simples.

Um menu de filtro com uma opção aplicada

Pré-visualização
<details rst-dropdown name="rst-menus">
  <summary rst-btn aria-label="Sort posts: newest first">Newest <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></summary>
  <div rst-dropdown-menu>
    <a href="/posts?sort=newest" aria-current="true">Newest <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg></a>
    <a href="/posts?sort=oldest">Oldest</a>
    <a href="/posts?sort=title">By title</a>
  </div>
</details>

bulk-bar

A faixa de cabeçalho do modo de seleção, que substitui a barra de lista: a contagem, uma ligação para alargar a seleção e o menu de ações.

Três linhas selecionadas

Pré-visualização
<div rst-list><div rst-bulkbar><a rst-bulkbar-close href="/posts" aria-label="Seleção concluída"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg></a><span rst-bulkbar-count>3 selected</span><a rst-bulkbar-escalate href="/posts?select=all">Select all 412 matching</a><details rst-dropdown name="rst-menus"><summary>Actions<span rst-caret aria-hidden="true"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></span></summary><div rst-dropdown-menu><button type="submit" name="action" value="export">Export</button><button type="submit" name="action" value="unpublish">Unpublish</button><button type="submit" name="action" value="delete" class="rst-danger">Delete…</button></div></details></div></div>

O item destrutivo fica em último: a primeira entrada é o valor que o Enter do formulário à volta dispara por omissão.

pagination

Uma tira numerada de ligações normais, para que a paginação continue a funcionar com o JavaScript desligado.

A meio de uma lista longa

Pré-visualização
<nav rst-pagination aria-label="Posts pages"><a href="/posts?page=3">Previous</a><a href="/posts?page=1">1</a><span rst-pagination-gap aria-hidden="true">…</span><a href="/posts?page=3">3</a><span aria-current="page">4</span><a href="/posts?page=5">5</a><span rst-pagination-gap aria-hidden="true">…</span><a href="/posts?page=9">9</a><a href="/posts?page=5">Next</a>
</nav>

Primeira página, com o nome acessível por omissão

Pré-visualização
<nav rst-pagination aria-label="Paginação"><span rst-pagination-disabled>Previous</span><span aria-current="page">1</span><a href="/posts?page=2">2</a><a href="/posts?page=2">Next</a>
</nav>

Sem Label, por isso o nome acessível do nav vem do catálogo.

empty-state

O cartão de estado vazio. Um estado vazio com caminhos para os primeiros passos.

Com um apelo à ação por POST

Pré-visualização
<div rst-empty>
  <h2 rst-empty-title>Nothing here yet</h2>
  <p rst-empty-body>No posts yet. Your first one is a good place to start.</p>
  <form rst-empty-cta method="post" action="/posts/seed">
    <input type="hidden" name="csrf" value="tok-123">
    <button rst-btn="primary" type="submit">Add sample posts</button>
  </form>
</div>

Só a frase

Pré-visualização
<div rst-empty>
  <p rst-empty-body>No comments on this post yet.</p>
</div>