Shadwire

Buscar na documentação

Busque nas páginas da documentação e dos componentes por título e por conteúdo.

Começar
Introdução
Instalação
shadwire.json
Theming
Dark mode
Ferramentas
CLI
Agent skill
Registry
llms.txt
Guias
Composição
Estilização
Formulários
Ícones
Acessibilidade
Localização
Blocks
Visão geral
Componentes
Visão geral
Accordion
Alert
Alert Dialog
Aspect Ratio
Avatar
Badge
Breadcrumb
Button
Button Group
Calendar
Card
Carousel
Chart
Checkbox
Collapsible
Combobox
Command
Context Menu
Data Table
Date Picker
Dialog
Drawer
Dropdown Menu
Empty
Field
Hover Card
Icon
Input
Input Group
Input OTP
Item
Kbd
Label
Menubar
Native Select
Navigation Menu
Pagination
Popover
Progress
Radio Group
Resizable
Scroll Area
Select
Separator
Sheet
Sidebar
Skeleton
Slider
Sonner
Spinner
Switch
Table
Tabs
Textarea
Toggle
Toggle Group
Tooltip

Accordion

Um conjunto vertical de cabeçalhos interativos que revelam seções de conteúdo.

Instalação

O Shadwire segue o modelo open code do shadcn/ui: o código-fonte do componente é copiado para o seu app e passa a ser seu. Instale com a CLI:

shadwire add accordion --yes

O item accordion do registry instala estes arquivos:

  • app/components/ui_component.rb
  • app/components/ui/accordion_component.rb
  • app/components/ui/accordion/item_component.rb
  • app/components/ui/accordion/header_component.rb
  • app/components/ui/accordion/trigger_component.rb
  • app/components/ui/accordion/content_component.rb
  • app/components/ui/accordion/panel_component.rb
  • app/components/ui/icon_component.rb
  • app/helpers/ui/accordion_helper.rb
  • app/helpers/ui/icon_helper.rb
  • app/javascript/controllers/ui_accordion_controller.js
  • vendor/shadwire/shadwire.css

Este componente usa Stimulus, então a aplicação precisa de importmap-rails e stimulus-rails com carregamento automático de controllers.

Ainda não instalou a CLI? gem install shadwire e depois shadwire init.

Uso

Use a composição Root > Item > Header > Trigger + Content. O helper ui_accordion aceita os mesmos argumentos de Ui::AccordionComponent.

<%= ui_accordion(default_value: :item_1) do %>
  <%= ui_accordion_item(value: :item_1) do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Is it accessible?" } %>
    <% end %>
    <%= ui_accordion_content do %>
      Yes. It follows the WAI-ARIA pattern for accordions.
    <% end %>

Também é possível renderizar as classes ViewComponent diretamente:

<%= render Ui::AccordionComponent.new(default_value: :item_1) do %>
  <%= render Ui::Accordion::ItemComponent.new(value: :item_1) do %>
    <%= render Ui::Accordion::HeaderComponent.new do %>
      <%= render Ui::Accordion::TriggerComponent.new do %>
        Is it accessible?
      <% end %>
    <% end %>
    <%= render Ui::Accordion::ContentComponent.new do %>

Composição

A anatomia segue a referência Base UI usada pelo shadcn: item, cabeçalho, trigger e painel de conteúdo. ui_accordion_panel é outro nome para ui_accordion_content.

<%= ui_accordion do %>
  <%= ui_accordion_item do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Title" } %>
    <% end %>
    <%= ui_accordion_content { "Content" } %>
  <% end %>
<% end %>

Exemplos

Básico

Um accordion simples que exibe um item por vez. O primeiro item começa aberto.

<%= ui_accordion(default_value: :password, class_name: "w-full max-w-md") do %>
  <%= ui_accordion_item(value: :password) do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Como redefino minha senha?" } %>
    <% end %>
    <%= ui_accordion_content do %>
      Clique em "Esqueci minha senha" na tela de entrada, informe seu e-mail e enviaremos um link válido por 24 horas.
    <% end %>

Vários abertos

Use multiple: true para permitir que vários itens fiquem abertos ao mesmo tempo.

<%= ui_accordion(multiple: true, default_value: [ :notifications, :privacy ], class_name: "w-full max-w-md") do %>
  <%= ui_accordion_item(value: :notifications) do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Configurações de notificação" } %>
    <% end %>
    <%= ui_accordion_content do %>
      Gerencie alertas por e-mail, notificações push e resumos semanais para acompanhar o que importa.
    <% end %>

Desabilitado

Use disabled: true no item para bloquear um painel específico.

<%= ui_accordion(default_value: :history, class_name: "w-full max-w-md") do %>
  <%= ui_accordion_item(value: :history) do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Consigo acessar meu histórico?" } %>
    <% end %>
    <%= ui_accordion_content do %>
      Sim. O histórico fica na área da conta, nos planos ativos.
    <% end %>

Com borda

Adicione a classe border no accordion para contornar o grupo.

<%= ui_accordion(default_value: :billing, class_name: "w-full max-w-md rounded-md border px-4") do %>
  <%= ui_accordion_item(value: :billing) do %>
    <%= ui_accordion_header do %>
      <%= ui_accordion_trigger { "Como funciona a cobrança?" } %>
    <% end %>
    <%= ui_accordion_content do %>
      A cobrança acontece no início de cada ciclo, mensal ou anual, e você pode cancelar quando quiser.
    <% end %>

Card

Coloque o Accordion dentro de um Card quando ele fizer parte de uma área maior.

Assinatura e cobrança

Dúvidas comuns sobre planos, pagamentos e cancelamentos.

<%= ui_card(class_name: "w-full max-w-md") do %>
  <%= ui_card_header do %>
    <%= ui_card_title { "Assinatura e cobrança" } %>
    <%= ui_card_description { "Dúvidas comuns sobre planos, pagamentos e cancelamentos." } %>
  <% end %>
  <%= ui_card_content do %>
    <%= ui_accordion(default_value: :plans) do %>
      <%= ui_accordion_item(value: :plans) do %>

Referência da API

Os helpers encapsulam os componentes ViewComponent e repassam qualquer atributo HTML, incluindo data: e aria:.

Helper Argumentos principais Descrição
ui_accordion multiple, default_value, orientation, disabled, loop_focus A raiz, com o controller Stimulus, os valores iniciais e a navegação por teclado.
ui_accordion_item value, disabled O item, com border-b last:border-b-0. Passe value sempre que usar default_value.
ui_accordion_header tag Renderiza o cabeçalho semântico; o padrão é :h3.
ui_accordion_trigger disabled O botão que abre e fecha o item, com o ícone chevron-down e as ações Stimulus.
ui_accordion_content / ui_accordion_panel class / class_name O painel, com role="region", as animações do shadcn e um wrapper interno pt-0 pb-4.