Sistema de componentes Tailwind · Novo recurso

Sistema de design Flowbite.

Uma composição nativa de acordeão e gaveta do Flowbite 4, com aliases de tema semântico verificados, uma lista de conferência de bagagem persistente e um fluxo acessível de anotações locais sobre materiais.

Guia OpenDesign9 capítulos33 entradas de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Flowbite

Expanda três categorias de itens, marque os materiais e prepare uma anotação local no painel lateral nativo.

Guia de campo para organizar materiais de oficinaAbrir exemplo completo
Acordeão e classes de painel lateral do Flowbite 4.0.2, tema padrão e Tailwind CSS 4.3.3. · Referência de implementação
02

Referência de design do sistema de design Flowbite

Tema padrão do Flowbite 4.0.2 com Tailwind CSS 4.3.3. Os aliases nomeados abaixo são variáveis reais do tema Flowbite; as escalas de cores referenciadas vêm do Tailwind. A ilustração dos materiais e as opções de espaçamento da aplicação são originais.

Papéis semânticos padrão para texto e status

Fonte
Nome / RegraValor / ConfiguraçãoUso
--color-bodyvar(--color-gray-600)Texto explicativo comum.
--color-body-subtlevar(--color-gray-500)Descrições complementares.
--color-headingvar(--color-gray-900)Títulos e rótulos de destaque.
--color-fg-brandvar(--color-blue-700)Texto em cor da marca.
--color-fg-successvar(--color-emerald-700)Texto de sucesso.
--color-fg-dangervar(--color-rose-700)Texto de erro.
--color-fg-warningvar(--color-orange-900)Texto de alerta.
--color-fg-disabledvar(--color-gray-400)Texto desativado.

Superfícies e bordas padrão

Fonte
Nome / RegraValor / ConfiguraçãoUso
--color-neutral-primaryvar(--color-white)Superfície do cartão e do painel lateral.
--color-neutral-secondaryvar(--color-gray-50)Plano de fundo da página.
--color-neutral-tertiaryvar(--color-gray-100)Trilho de progresso.
--color-brandvar(--color-blue-700)Ação primária e progresso dos itens organizados.
--color-brand-softvar(--color-blue-100)Indicador de foco ou superfície suave da marca.
--color-brand-softervar(--color-blue-50)Superfície do acordeão aberto e da ilustração.
--color-brand-strongvar(--color-blue-800)Passagem do cursor sobre uma ação.
--color-defaultvar(--color-gray-200)Borda padrão do componente.
--color-success-softvar(--color-emerald-50)Superfície do resultado local.

Variáveis padrão de geometria e fontes

Fonte
Nome / RegraValor / ConfiguraçãoUso
--font-sans'Inter', 'ui-sans-serif', 'system-ui', '-apple-system', 'system-ui', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'Pilha de interface com Inter como primeira opção; a prévia usa a alternativa de sistema disponível, sem fontes remotas.
--font-mono'ui-monospace', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace'Pilha de fontes para código.
--radius-xxs2pxRaio de dois pixels.
--radius-xs4pxRaio de quatro pixels.
--radius-sm6pxRaio de seis pixels.
--radius8pxRaio de oito pixels.
--radius-base12pxRaio de doze pixels do painel, usado por rounded-base.
--radius-lg16pxRaio de dezesseis pixels.
--default-border-width1pxBordas de um pixel.
--leading-520pxEntrelinha de vinte pixels.
--leading-624pxEntrelinha de vinte e quatro pixels.

Valores de layout do Tailwind usados no exemplo

Fonte
Nome / RegraValor / ConfiguraçãoUso
p-6 / md:p-101.5rem / 2.5remPreenchimento da página, baseado na unidade de espaçamento padrão de um quarto de rem do Tailwind.
gap-82remEspaço entre as categorias de materiais e o resumo do progresso.
md breakpoint48remMude para duas colunas.
text-sm / text-xl / text-3xl0.875rem / 1.25rem / 1.875remUtilitários para o corpo do texto, o título da seção e o título da página.
w-96 / max-w-full24rem / 100%A largura do painel lateral não ultrapassa a área visível em dispositivos móveis.
03

Guia completo do sistema de design Flowbite

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-flowbite.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Flowbite Four adiciona um tema padrão com nome ao sistema de design

Flowbite Four adiciona um tema padrão com nome

Este exemplo usa o Flowbite 4.0.2, não uma coleção sem versão de trechos antigos em azul e cinza. O tema padrão define aliases semânticos, como color-body, color-heading, color-brand e color-neutral-primary. A página importa esse tema antes de aplicar o plugin Tailwind do Flowbite e, em seguida, usa classes correspondentes, como text-heading e bg-brand.

Com base neste guia de OpenDesign

Os aliases apontam para as escalas de cores do Tailwind. Por exemplo, a ação padrão da marca referencia blue-700, enquanto o estado de passagem do cursor, mais intenso, referencia blue-800. A especificação mantém essas referências para que seja possível distinguir o papel semântico do valor de cor primitivo. A ilustração dos materiais reutiliza os mesmos papéis da marca, mas não é uma ilustração oficial do Flowbite.

Consulte a especificação de apoio

Sistema de design Flowbite: a geometria do tema e o layout do Tailwind trabalham em conjunto

A geometria do tema e o layout do Tailwind trabalham em conjunto

O tema padrão define radius-base como doze pixels, valor usado por rounded-base nos contêineres principais, nos controles do painel lateral e no aviso de resultado. Ele também define raios distintos de dois, quatro, seis, oito e dezesseis pixels. Por isso, importar o tema é importante quando um componente copiado usa os nomes de classe semânticos mais recentes.

Inter aparece primeiro na pilha de fontes fornecida, mas esta prévia autocontida não baixa fontes remotas. Ela usa a alternativa de sistema disponível. O espaçamento da página segue os utilitários do Tailwind: p-6 equivale a um rem e meio, gap-8 a dois rem e p-10 para desktop a dois rem e meio. Esses utilitários de layout não são apresentados como uma escala de espaçamento Flowbite inventada à parte.

Consulte a especificação de apoio

Sistema de design Flowbite: uma instância de acordeão controla três categorias

Uma instância de acordeão controla três categorias

O JavaScript cria um Accordion com uma lista de itens. Cada item tem um ID estável, um elemento acionador e um painel de destino; a categoria Paper começa aberta. alwaysOpen é false, então abrir Tools fecha Paper. As classes activeClasses e inactiveClasses personalizadas usam os nomes semânticos de texto e superfície do tema padrão.

A classe controla a visibilidade do painel e atualiza aria-expanded no acionador. A marcação fornece aria-controls e IDs correspondentes para os painéis. As caixas de seleção da lista permanecem no documento quando um painel é recolhido, portanto, o estado marcado persiste ao alternar entre categorias. Recolher uma seção altera sua visibilidade, mas não apaga o trabalho de organização do usuário.

Consulte a especificação de apoio

Sistema de design Flowbite: o progresso é calculado com base nas caixas de seleção marcadas

O progresso é calculado com base nas caixas de seleção marcadas

Seis caixas de seleção reais representam materiais específicos para a oficina. A aplicação calcula a quantidade de itens organizados, o próximo item e o texto sobre os itens restantes com base no estado atual das caixas. A largura da barra de progresso e aria-valuenow são atualizadas com base nessa mesma contagem; nenhum contador separado pode divergir da lista.

As folhas de desenho e o papel vegetal são opções separadas porque sua preparação é diferente. O tapete de corte representa uma estação compartilhada, e a fita de baixa aderência vem acompanhada de um alerta sobre superfícies de parede. Esses detalhes concretos tornam a categoria expandida útil; o acordeão não serve apenas para ocultar parágrafos genéricos repetidos.

  1. Abra Paper e marque Folhas de desenho como organizadas.
  2. Abra Tools, marque Lápis e marcadores como organizados e volte para Paper.
  3. Confira se as duas opções continuam marcadas e se o resumo indica duas de seis.

Consulte a especificação de apoio

Sistema de design Flowbite: uma instância de painel lateral controla a visibilidade e o fundo sobreposto

Uma instância de painel lateral controla a visibilidade e o fundo sobreposto

O painel de materiais é inicializado com new Drawer, usando placement right, backdrop true e bodyScrolling false. Para abrir o painel, chama-se show; para fechá-lo, hide. A implementação nativa de Flowbite aplica as classes de posicionamento e transição, o backdrop e os atributos de visibilidade. Esta página usa deliberadamente o JavaScript API, em vez de combiná-lo com outro inicializador baseado em atributos de dados para o mesmo painel.

A largura do drawer é de vinte e quatro rem, com max-w-full, para que continue utilizável em uma janela estreita. O conteúdo pode rolar verticalmente dentro do painel. A altura da página é determinada pelo conteúdo; o h-screen do drawer é uma sobreposição fixa intencional e não cria um ciclo de altura mínima para a página incorporada.

Consulte a especificação de apoio

Sistema de design Flowbite: adicione gerenciamento de foco ao ciclo de vida do drawer

Adicione o gerenciamento de foco ao ciclo de vida do painel lateral

O callback onShow torna o elemento main do plano de fundo inerte e move o foco para o campo Prepared by. onHide remove o atributo inert e devolve o foco à observação Prepare materials. Um pequeno manipulador de keydown mantém o foco em ciclo entre o primeiro e o último controle do painel ao pressionar Tab ou Shift+Tab. Esses acréscimos estão visíveis no código-fonte completo; não se presume que sejam fornecidos por uma classe de estilo.

Flowbite trata a tecla Escape no drawer. Os callbacks do exemplo garantem que, qualquer que seja a forma de fechar o painel, o plano de fundo volte a ser interativo. O painel é identificado por aria-labelledby; o controle de fechamento tem um nome acessível explícito. Em uma aplicação real, esse comportamento deve ser testado junto com os próprios portais e o roteamento, sem presumir que o nome de uma biblioteca garanta acessibilidade em todos os casos.

Consulte a especificação de apoio

Sistema de design Flowbite: valide o responsável e salve apenas o texto local

Valide o responsável e salve apenas o texto local

O campo Prepared by é obrigatório e tem limites mínimo e máximo de caracteres. Além disso, o manipulador de envio remove os espaços em branco no início e no fim do nome e rejeita entradas que contenham apenas espaços. Session note é opcional e aceita até 240 caracteres. O resumo dos itens restantes é atualizado quando o drawer é aberto, para refletir a lista de verificação atual, e não uma etapa anterior da preparação.

Ao salvar, o drawer é fechado e uma nota local é anunciada com o responsável, a quantidade de itens separados e o texto opcional. Nenhum e-mail é enviado e nenhum documento compartilhado é criado. As strings fornecidas pelo usuário são atribuídas com textContent. Ao editar a lista de verificação, o aviso de resultado anterior é removido, pois a contagem que ele exibe deixaria de ser confiável.

Consulte a especificação de apoio

Sistema de design Flowbite: inclua as classes geradas pela biblioteca JavaScript

Inclua as classes geradas pela biblioteca JavaScript

A entrada do Tailwind importa o tema padrão de Flowbite e registra flowbite/plugin. Diretivas source explícitas incluem HTML, o módulo da aplicação e a biblioteca ESM de Flowbite. Esta última origem é importante: as classes adicionadas pela biblioteca em tempo de execução precisam estar presentes na folha de estilos gerada, mesmo que não tenham sido escritas diretamente no HTML inicial.

O pacote importa Accordion e Drawer de flowbite. O exemplo inicializa cada instância uma única vez, depois que a marcação está disponível. Aplicações com frameworks que montam e desmontam telas devem combinar a configuração do ciclo de vida com a limpeza das instâncias para evitar ouvintes duplicados. Esta página local tem uma única montagem e não faz transições no lado do cliente entre rotas.

Consulte a especificação de apoio

Sistema de design Flowbite: um guia de preparação com limites de implementação claros

Um guia de organização com limites de implementação visíveis

O guia de campo demonstra um acordeão com bastante conteúdo, estado persistente das caixas de seleção e um fluxo com sobreposição. Ele não inventa dados de estoque nem resultados de compras remotas. Os seis materiais são tarefas de exemplo para preparar uma oficina, e a nota salva permanece na memória enquanto a página estiver aberta.

O tema semântico padrão, as classes dos componentes e o comportamento de JavaScript vêm de Flowbite; o conteúdo da oficina, a ilustração original e o aprimoramento do gerenciamento de foco são código da aplicação. Essa separação permite copiar uma composição útil e entender quais responsabilidades a biblioteca realmente cobre.

  • Use a instância com estado de Flowbite para controlar a visibilidade do painel.
  • Mantenha os dados da lista de verificação e o progresso calculado na lógica da aplicação.
  • Trate compras reais ou persistência compartilhada somente por meio de uma integração explícita com um backend.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design Flowbite

Marcação do guia de preparação e do drawer

Classes de tema semântico, controles de caixa de seleção reais e painéis de acordeão vinculados.

html
<main id="page" class="mx-auto max-w-5xl p-6 md:p-10 text-body"><header class="mb-8 flex flex-wrap items-start justify-between gap-4"><div><p class="text-xs font-semibold tracking-widest text-fg-brand">FLOWBITE · FIELD GUIDE</p><h1 class="mt-3 text-3xl font-semibold tracking-tight text-heading">Pack for a day of making.</h1><p class="mt-3 max-w-xl text-sm leading-6">A workshop packing guide with grouped instructions and a local materials note.</p></div><button id="open-note" class="rounded-base bg-brand px-5 py-3 text-sm font-medium text-white hover:bg-brand-strong focus:ring-4 focus:ring-brand-soft">Prepare materials note</button></header><div class="grid gap-8 md:grid-cols-[1.4fr_1fr]"><section aria-label="Packing categories"><div id="packing-accordion" class="overflow-hidden rounded-base border border-default"><h2><button id="paper-trigger" type="button" class="category-trigger" aria-expanded="true" aria-controls="paper-panel"><span><b>01</b> Paper & surfaces</span><span aria-hidden="true">⌄</span></button></h2><div id="paper-panel" aria-labelledby="paper-trigger"><div class="category-body"><p>Choose stocks before the session. Keep one sheet untouched as a reference.</p><label><input type="checkbox" data-item="Drawing sheets" class="check"> <span><strong>Drawing sheets</strong><small>12 × A3 sheets, 120–160 gsm</small></span></label><label><input type="checkbox" data-item="Tracing paper" class="check"> <span><strong>Tracing paper</strong><small>6 sheets for overlays and revisions</small></span></label></div></div><h2><button id="tools-trigger" type="button" class="category-trigger" aria-expanded="false" aria-controls="tools-panel"><span><b>02</b> Tools & marks</span><span aria-hidden="true">⌄</span></button></h2><div id="tools-panel" class="hidden" aria-labelledby="tools-trigger"><div class="category-body"><p>Test every marker. Put cutting tools in a separate protective sleeve.</p><label><input type="checkbox" data-item="Pencils and markers" class="check"> <span><strong>Pencils and markers</strong><small>2B pencils, one broad and one fine marker</small></span></label><label><input type="checkbox" data-item="Ruler and cutting mat" class="check"> <span><strong>Ruler and cutting mat</strong><small>One shared station per four people</small></span></label></div></div><h2><button id="space-trigger" type="button" class="category-trigger" aria-expanded="false" aria-controls="space-panel"><span><b>03</b> Shared space</span><span aria-hidden="true">⌄</span></button></h2><div id="space-panel" class="hidden" aria-labelledby="space-trigger"><div class="category-body"><p>Make wall space usable and document ideas before taking them down.</p><label><input type="checkbox" data-item="Low-tack tape" class="check"> <span><strong>Low-tack tape</strong><small>Test on a hidden part of the wall first</small></span></label><label><input type="checkbox" data-item="Documentation cards" class="check"> <span><strong>Documentation cards</strong><small>One title and author card per final piece</small></span></label></div></div></div></section><aside class="rounded-base border border-default bg-neutral-primary p-6"><div class="kit-art" aria-hidden="true"><i></i><i></i><i></i><em class="bg-brand-medium"></em></div><p class="mt-5 text-xs tracking-widest text-fg-brand font-semibold">WORKSHOP KIT</p><h2 class="mt-2 text-xl font-semibold text-heading">Six things, one shared table.</h2><p class="mt-3 text-sm leading-6">Check items as you pack. Opening another category keeps your choices.</p><div class="mt-6 flex items-center justify-between text-sm"><span>Packed</span><output id="count" class="font-semibold text-heading">0 of 6</output></div><div class="mt-2 h-2 rounded-full bg-neutral-tertiary" role="progressbar" aria-label="Packing progress" aria-valuemin="0" aria-valuemax="6" aria-valuenow="0"><div id="bar" class="h-2 rounded-full bg-brand" style="width:0%"></div></div><p id="next-item" class="mt-4 text-sm text-body-subtle">Next: Drawing sheets</p><button id="clear" class="mt-5 text-sm font-medium text-fg-brand underline underline-offset-4">Clear packed items</button></aside></div><p id="result" class="mt-6 rounded-base bg-success-soft p-4 text-sm text-fg-success" role="status" hidden></p></main><aside id="materials-drawer" tabindex="-1" aria-labelledby="drawer-title" class="fixed right-0 top-0 z-40 h-screen w-96 max-w-full translate-x-full overflow-y-auto border-l border-default bg-neutral-primary p-6"><div class="flex items-center justify-between gap-4"><h2 id="drawer-title" class="text-xl font-semibold text-heading">Materials note</h2><button id="close-note" class="rounded-base border border-default px-3 py-2 text-sm" aria-label="Close materials note">Close</button></div><p class="mt-4 text-sm leading-6 text-body">Record who is preparing the kit and which items still need attention.</p><form id="note-form" class="mt-6"><label for="owner" class="mb-2 block text-sm font-medium text-heading">Prepared by</label><input id="owner" class="mb-5 block w-full rounded-base border border-default bg-neutral-secondary p-3 text-sm text-heading focus:border-brand focus:ring-brand" required minlength="2" maxlength="60" placeholder="Your name"><label for="note" class="mb-2 block text-sm font-medium text-heading">Session note</label><textarea id="note" rows="4" maxlength="240" class="block w-full rounded-base border border-default bg-neutral-secondary p-3 text-sm text-heading focus:border-brand focus:ring-brand" placeholder="For example: bring the shared cutting mat."></textarea><p id="remaining" class="mt-5 text-sm leading-6 text-body"></p><button type="submit" class="mt-6 w-full rounded-base bg-brand px-5 py-3 text-sm font-medium text-white hover:bg-brand-strong">Save local note</button><p class="mt-3 text-xs leading-5 text-body-subtle">No email, purchase or shared document is created.</p></form></aside>

Referência de código

  • Os botões são vinculados aos IDs dos painéis por meio de aria-controls.
  • O título identifica o drawer.
  • A barra de progresso expõe a mesma contagem exibida para pessoas com visão.

Instâncias nativas de Flowbite e estado local

Inicialização de Accordion e Drawer, além da lista de verificação específica da aplicação e do gerenciamento de foco.

javascript
import {Accordion,Drawer} from 'flowbite';
const q=s=>document.querySelector(s),drawerEl=q('#materials-drawer'),page=q('#page');
const accordion=new Accordion(q('#packing-accordion'),['paper','tools','space'].map((id,i)=>({id,triggerEl:q(`#${id}-trigger`),targetEl:q(`#${id}-panel`),active:i===0})),{alwaysOpen:false,activeClasses:'bg-brand-softer text-fg-brand',inactiveClasses:'bg-neutral-primary text-heading'});
const drawer=new Drawer(drawerEl,{placement:'right',backdrop:true,bodyScrolling:false,onShow(){page.inert=true;q('#owner').focus();},onHide(){page.inert=false;q('#open-note').focus();}});
const boxes=[...document.querySelectorAll('[data-item]')];
function refresh(){let packed=boxes.filter(x=>x.checked),left=boxes.filter(x=>!x.checked);q('#count').value=`${packed.length} of 6`;q('#bar').style.width=`${packed.length/6*100}%`;q('[role="progressbar"]').setAttribute('aria-valuenow',packed.length);q('#next-item').textContent=left.length?`Next: ${left[0].dataset.item}`:'Everything on the list is packed.';q('#remaining').textContent=left.length?`Still needed: ${left.map(x=>x.dataset.item).join(', ')}.`:'All six materials are packed.';q('#result').hidden=true;}
boxes.forEach(x=>x.addEventListener('change',refresh));q('#clear').onclick=()=>{boxes.forEach(x=>x.checked=false);refresh();};q('#open-note').onclick=()=>{refresh();drawer.show();};q('#close-note').onclick=()=>drawer.hide();drawerEl.addEventListener('keydown',e=>{if(e.key==='Tab'){let els=[...drawerEl.querySelectorAll('button,input,textarea')],first=els[0],last=els.at(-1);if(e.shiftKey&&document.activeElement===first){e.preventDefault();last.focus();}else if(!e.shiftKey&&document.activeElement===last){e.preventDefault();first.focus();}}});q('#note-form').onsubmit=e=>{e.preventDefault();const owner=q('#owner');if(owner.value.trim().length<2){owner.setCustomValidity('Enter at least two non-space characters.');owner.reportValidity();return;}drawer.hide();q('#result').hidden=false;q('#result').textContent=`Local note prepared by ${owner.value.trim()}: ${boxes.filter(x=>x.checked).length} of 6 items packed. ${q('#note').value.trim()||'No extra note.'}`;};q('#owner').oninput=()=>q('#owner').setCustomValidity('');refresh();

Referência de código

  • Uma instância de Accordion controla as três categorias.
  • Os callbacks do ciclo de vida do drawer tornam o plano de fundo inerte e restauram o foco.
  • O ciclo de foco é um acréscimo explícito da aplicação.

Ilustração original de preparação e CSS de apoio

Detalhes de layout da aplicação ao redor dos utilitários nativos.

css
body{margin:0;background:var(--color-neutral-secondary);font-family:var(--font-sans)}.category-trigger{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;width:100%;text-align:left;font-size:15px;font-weight:600;border-bottom:1px solid var(--color-default)}.category-trigger b{font-size:11px;opacity:.6;margin-right:12px}.category-trigger:focus-visible{outline:3px solid var(--color-brand);outline-offset:-3px}.category-body{padding:20px;background:var(--color-neutral-primary);font-size:14px;line-height:1.7;border-bottom:1px solid var(--color-default)}.category-body p{margin-bottom:20px}.category-body label{display:flex;align-items:flex-start;gap:12px;margin:16px 0;cursor:pointer}.category-body small{display:block;font-size:12px;color:var(--color-body-subtle);margin-top:4px}.check{width:18px;height:18px;border:1px solid var(--color-default);border-radius:4px;margin-top:3px;color:var(--color-brand)}.kit-art{height:160px;background:var(--color-brand-softer);border-radius:var(--radius-base);position:relative;overflow:hidden}.kit-art i{position:absolute;width:110px;height:95px;background:#fff;border:1px solid var(--color-brand-medium);top:35px;left:20%;transform:rotate(-12deg)}.kit-art i:nth-child(2){left:35%;transform:rotate(10deg);background:var(--color-brand-soft)}.kit-art i:nth-child(3){width:8px;height:120px;left:70%;top:20px;transform:rotate(25deg);background:var(--color-brand)}.kit-art em{position:absolute;width:95px;height:22px;background:var(--color-brand-medium);bottom:20px;left:20%;transform:rotate(-20deg)}[hidden]{display:none!important}button{cursor:pointer}button:focus-visible{outline:3px solid var(--color-brand);outline-offset:3px}@media(max-width:600px){.category-trigger,.category-body{padding:16px}}

Referência de código

  • A geometria do papel, do lápis e da régua é uma CSS decorativa original.

Documento index.html completo

Use com a compilação da folha de estilos e o código completo de interação fornecidos acima.

html
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Flowbite specimen</title><link rel="stylesheet" href="output.css"><link rel="stylesheet" href="style.css"></head><body>
<main id="page" class="mx-auto max-w-5xl p-6 md:p-10 text-body"><header class="mb-8 flex flex-wrap items-start justify-between gap-4"><div><p class="text-xs font-semibold tracking-widest text-fg-brand">FLOWBITE · FIELD GUIDE</p><h1 class="mt-3 text-3xl font-semibold tracking-tight text-heading">Pack for a day of making.</h1><p class="mt-3 max-w-xl text-sm leading-6">A workshop packing guide with grouped instructions and a local materials note.</p></div><button id="open-note" class="rounded-base bg-brand px-5 py-3 text-sm font-medium text-white hover:bg-brand-strong focus:ring-4 focus:ring-brand-soft">Prepare materials note</button></header><div class="grid gap-8 md:grid-cols-[1.4fr_1fr]"><section aria-label="Packing categories"><div id="packing-accordion" class="overflow-hidden rounded-base border border-default"><h2><button id="paper-trigger" type="button" class="category-trigger" aria-expanded="true" aria-controls="paper-panel"><span><b>01</b> Paper & surfaces</span><span aria-hidden="true">⌄</span></button></h2><div id="paper-panel" aria-labelledby="paper-trigger"><div class="category-body"><p>Choose stocks before the session. Keep one sheet untouched as a reference.</p><label><input type="checkbox" data-item="Drawing sheets" class="check"> <span><strong>Drawing sheets</strong><small>12 × A3 sheets, 120–160 gsm</small></span></label><label><input type="checkbox" data-item="Tracing paper" class="check"> <span><strong>Tracing paper</strong><small>6 sheets for overlays and revisions</small></span></label></div></div><h2><button id="tools-trigger" type="button" class="category-trigger" aria-expanded="false" aria-controls="tools-panel"><span><b>02</b> Tools & marks</span><span aria-hidden="true">⌄</span></button></h2><div id="tools-panel" class="hidden" aria-labelledby="tools-trigger"><div class="category-body"><p>Test every marker. Put cutting tools in a separate protective sleeve.</p><label><input type="checkbox" data-item="Pencils and markers" class="check"> <span><strong>Pencils and markers</strong><small>2B pencils, one broad and one fine marker</small></span></label><label><input type="checkbox" data-item="Ruler and cutting mat" class="check"> <span><strong>Ruler and cutting mat</strong><small>One shared station per four people</small></span></label></div></div><h2><button id="space-trigger" type="button" class="category-trigger" aria-expanded="false" aria-controls="space-panel"><span><b>03</b> Shared space</span><span aria-hidden="true">⌄</span></button></h2><div id="space-panel" class="hidden" aria-labelledby="space-trigger"><div class="category-body"><p>Make wall space usable and document ideas before taking them down.</p><label><input type="checkbox" data-item="Low-tack tape" class="check"> <span><strong>Low-tack tape</strong><small>Test on a hidden part of the wall first</small></span></label><label><input type="checkbox" data-item="Documentation cards" class="check"> <span><strong>Documentation cards</strong><small>One title and author card per final piece</small></span></label></div></div></div></section><aside class="rounded-base border border-default bg-neutral-primary p-6"><div class="kit-art" aria-hidden="true"><i></i><i></i><i></i><em class="bg-brand-medium"></em></div><p class="mt-5 text-xs tracking-widest text-fg-brand font-semibold">WORKSHOP KIT</p><h2 class="mt-2 text-xl font-semibold text-heading">Six things, one shared table.</h2><p class="mt-3 text-sm leading-6">Check items as you pack. Opening another category keeps your choices.</p><div class="mt-6 flex items-center justify-between text-sm"><span>Packed</span><output id="count" class="font-semibold text-heading">0 of 6</output></div><div class="mt-2 h-2 rounded-full bg-neutral-tertiary" role="progressbar" aria-label="Packing progress" aria-valuemin="0" aria-valuemax="6" aria-valuenow="0"><div id="bar" class="h-2 rounded-full bg-brand" style="width:0%"></div></div><p id="next-item" class="mt-4 text-sm text-body-subtle">Next: Drawing sheets</p><button id="clear" class="mt-5 text-sm font-medium text-fg-brand underline underline-offset-4">Clear packed items</button></aside></div><p id="result" class="mt-6 rounded-base bg-success-soft p-4 text-sm text-fg-success" role="status" hidden></p></main><aside id="materials-drawer" tabindex="-1" aria-labelledby="drawer-title" class="fixed right-0 top-0 z-40 h-screen w-96 max-w-full translate-x-full overflow-y-auto border-l border-default bg-neutral-primary p-6"><div class="flex items-center justify-between gap-4"><h2 id="drawer-title" class="text-xl font-semibold text-heading">Materials note</h2><button id="close-note" class="rounded-base border border-default px-3 py-2 text-sm" aria-label="Close materials note">Close</button></div><p class="mt-4 text-sm leading-6 text-body">Record who is preparing the kit and which items still need attention.</p><form id="note-form" class="mt-6"><label for="owner" class="mb-2 block text-sm font-medium text-heading">Prepared by</label><input id="owner" class="mb-5 block w-full rounded-base border border-default bg-neutral-secondary p-3 text-sm text-heading focus:border-brand focus:ring-brand" required minlength="2" maxlength="60" placeholder="Your name"><label for="note" class="mb-2 block text-sm font-medium text-heading">Session note</label><textarea id="note" rows="4" maxlength="240" class="block w-full rounded-base border border-default bg-neutral-secondary p-3 text-sm text-heading focus:border-brand focus:ring-brand" placeholder="For example: bring the shared cutting mat."></textarea><p id="remaining" class="mt-5 text-sm leading-6 text-body"></p><button type="submit" class="mt-6 w-full rounded-base bg-brand px-5 py-3 text-sm font-medium text-white hover:bg-brand-strong">Save local note</button><p class="mt-3 text-xs leading-5 text-body-subtle">No email, purchase or shared document is created.</p></form></aside>

<script src="bundle.js" defer></script></body></html>

Referência de código

  • Salve a interação fornecida como main.js e compile-a em bundle.js, conforme mostrado na configuração.
  • A área de visualização e o carregamento nativo de recursos estão incluídos.
04

Configuração do agente do sistema de design Flowbite

Ponto de partida para implementação

Verificado com Flowbite 4.0.2 e Tailwind CSS 4.3.3. Ajuste o caminho de origem em node_modules à localização real de input.css. Não são necessárias fontes remotas.

css
/* npm install [email protected] */
/* npm install -D [email protected] @tailwindcss/[email protected] esbuild */
/* input.css, next to body.html and main.js: */
@import "tailwindcss" source(none);
@import "flowbite/src/themes/default";
@plugin "flowbite/plugin";
@source "./body.html";
@source "./main.js";
@source "./node_modules/flowbite/lib/esm";
/* npx @tailwindcss/cli -i input.css -o output.css --minify */
/* npx esbuild main.js --bundle --format=iife --outfile=bundle.js */
/* index.html: link output.css then style.css; include the supplied markup. */
/* Load bundle.js with defer, or after the markup. */

Um prompt para seu projeto

Prompt para agente de IA
Use o guia completo de preparação para oficinas de Flowbite 4.0.2, incluindo a descoberta de origens do Tailwind e a inicialização nativa de Accordion e Drawer. Mantenha os materiais agrupados e o estado da lista de verificação associados ao guia, e valide os dados do responsável antes de registrar uma nota local de preparação. Preserve o gerenciamento de foco por teclado, o tratamento do plano de fundo como inerte e o comportamento de fechamento do drawer. Mantenha a ilustração original CSS separada do tema semântico da biblioteca. Não introduza solicitações de serviço nem envios externos neste fluxo local de preparação.
05

Fontes e escopo do sistema de design Flowbite

Flowbite 4.0.2 com o tema padrão. O conteúdo sobre a preparação, a arte decorativa e o aprimoramento do gerenciamento de foco são originais. As notas sobre os materiais permanecem locais.