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

shadwire.json

O manifesto que a CLI grava na raiz do app. diff, update e remove consultam esse arquivo para saber o que está instalado.

O shadwire init cria este arquivo uma vez. Depois disso, todo add, update e remove atualiza a seção installed. Faça commit dele junto com o resto do código.

{
  "$schema": "https://shadwire.edumoraes.dev.br/schema.json",
  "registry": "https://shadwire.edumoraes.dev.br/r",
  "tailwind": { "css": "app/assets/tailwind/application.css" },
  "aliases": {
    "components":  "app/components",
    "ui":          "app/components/ui",
    "helpers":     "app/helpers",

Campos

Campo O que é
registry A URL base de onde a CLI instala. É definida pelo init --registry. Aceita https:// e file://.
tailwind.css O entrypoint do Tailwind do app, onde o init adiciona o @import do shadwire.css.
aliases Para onde cada tipo de arquivo vai. Mude aqui se o seu app não segue a árvore padrão do Rails.
installed Uma entrada por componente: a version do registry e os arquivos que são dele. diff, update e remove trabalham a partir dessa lista.

Aliases

Cada arquivo do registry tem um tipo (componente, helper, controller Stimulus, CSS), e o alias desse tipo define em qual diretório ele é gravado.

Alias Padrão Recebe
components app/components A superclasse compartilhada UiComponent.
ui app/components/ui As classes de componente e seus templates.
helpers app/helpers Os módulos Ui::*Helper com os wrappers ui_*.
controllers app/javascript/controllers Os controllers Stimulus dos componentes interativos.
vendorCss vendor/shadwire O shadwire.css, que contém os tokens.

Se o seu app tem outra estrutura, uma engine por exemplo, aponte os aliases para os diretórios certos antes do primeiro add:

{
  "aliases": {
    "components":  "app/components",
    "ui":          "app/components/ui",
    "helpers":     "app/helpers",
    "controllers": "app/javascript/controllers",
    "vendorCss":   "app/assets/stylesheets/shadwire"
  },

O @import do Tailwind

O init adiciona este import no arquivo indicado em tailwind.css. É ele que leva os tokens para o build do Tailwind:

@import "tailwindcss";
@import "../../../vendor/shadwire/shadwire.css";

O bin/shadwire status --json traz o campo tailwind.importPresent. Se vier false, o import foi removido e os componentes vão aparecer sem cor.

Resolução do registry

Todo comando escolhe a URL do registry nesta ordem:

  1. a flag --registry, se passada;
  2. o campo registry do shadwire.json do app;
  3. o padrão embutido, https://shadwire.edumoraes.dev.br/r.
bin/shadwire add button --registry file://$PWD/build/r
shadwire init --registry https://ui.example.com/r

No init, o --registry fica salvo no arquivo. Nos outros comandos, vale só para aquela execução. O formato está descrito na página Registry.