Sistema de componentes Tailwind · Nuevo recurso

Sistema de diseño Flowbite.

Una composición con acordeón y panel lateral nativos de Flowbite 4, con alias semánticos del tema verificados, una lista de equipaje persistente y un flujo accesible para añadir notas sobre materiales de forma local.

Guía de OpenDesign9 capítulos33 entradas de referenciaGuía de aplicación original
01

Vista previa de la interfaz del sistema de diseño Flowbite

Despliega tres categorías de equipaje, marca los materiales y prepara una nota local en el panel lateral nativo.

Guía de campo para preparar el equipaje del tallerAbrir ejemplo completo
Clases de acordeón y panel lateral de Flowbite 4.0.2, tema predeterminado y Tailwind CSS 4.3.3. · Referencia de implementación
02

Referencia de diseño del sistema de diseño Flowbite

Tema predeterminado de Flowbite 4.0.2 con Tailwind CSS 4.3.3. Los alias con nombre que aparecen a continuación son variables reales del tema Flowbite; las escalas a las que hacen referencia proceden de Tailwind. La ilustración del equipaje y las decisiones sobre el espaciado de la aplicación son originales.

Funciones semánticas predeterminadas de texto y estado

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--color-bodyvar(--color-gray-600)Texto explicativo normal.
--color-body-subtlevar(--color-gray-500)Descripciones complementarias.
--color-headingvar(--color-gray-900)Encabezados y etiquetas con énfasis alto.
--color-fg-brandvar(--color-blue-700)Texto en color de marca.
--color-fg-successvar(--color-emerald-700)Texto de éxito.
--color-fg-dangervar(--color-rose-700)Texto de error.
--color-fg-warningvar(--color-orange-900)Texto de advertencia.
--color-fg-disabledvar(--color-gray-400)Texto deshabilitado.

Superficies y bordes predeterminados

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--color-neutral-primaryvar(--color-white)Superficie de la tarjeta y del panel lateral.
--color-neutral-secondaryvar(--color-gray-50)Fondo de página.
--color-neutral-tertiaryvar(--color-gray-100)Pista de progreso.
--color-brandvar(--color-blue-700)Acción principal y progreso de elementos preparados.
--color-brand-softvar(--color-blue-100)Anillo de foco o superficie suave de marca.
--color-brand-softervar(--color-blue-50)Superficie del acordeón abierto y la ilustración.
--color-brand-strongvar(--color-blue-800)Al pasar el cursor sobre una acción.
--color-defaultvar(--color-gray-200)Borde estándar del componente.
--color-success-softvar(--color-emerald-50)Superficie del resultado local.

Variables predeterminadas de geometría y tipografía

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--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'Pila de fuentes de interfaz con Inter en primer lugar; la vista previa usa la fuente alternativa del sistema disponible y no carga fuentes remotas.
--font-mono'ui-monospace', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace'Pila de fuentes para código.
--radius-xxs2pxRadio de dos píxeles.
--radius-xs4pxRadio de cuatro píxeles.
--radius-sm6pxRadio de seis píxeles.
--radius8pxRadio de ocho píxeles.
--radius-base12pxRadio de doce píxeles del panel, usado por rounded-base.
--radius-lg16pxRadio de dieciséis píxeles.
--default-border-width1pxBordes de un píxel.
--leading-520pxInterlineado de veinte píxeles.
--leading-624pxInterlineado de veinticuatro píxeles.

Valores de maquetación de Tailwind utilizados en el ejemplo

Fuente
Nombre / ReglaValor / ConfiguraciónUso
p-6 / md:p-101.5rem / 2.5remRelleno de página basado en la unidad de espaciado predeterminada de Tailwind, de un cuarto de rem.
gap-82remEspacio entre las categorías de equipaje y el resumen de progreso.
md breakpoint48remCambiar a dos columnas.
text-sm / text-xl / text-3xl0.875rem / 1.25rem / 1.875remClases de utilidad para el cuerpo, el título de sección y el título de página.
w-96 / max-w-full24rem / 100%El ancho del panel lateral se mantiene dentro de la ventana gráfica móvil.
03

Guía completa del sistema de diseño Flowbite

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

DESIGN-flowbite.md

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

Descargar la guía

Sistema de diseño Flowbite Four añade un tema predeterminado con nombre

Flowbite Four añade un tema predeterminado con nombre

Este ejemplo usa Flowbite 4.0.2, no una colección sin versión de fragmentos antiguos en azul y gris. Su tema predeterminado define alias semánticos como color-body, color-heading, color-brand y color-neutral-primary. La página importa ese tema antes de aplicar el complemento Tailwind de Flowbite y después usa clases correspondientes, como text-heading y bg-brand.

De esta guía de OpenDesign

Los alias apuntan a las escalas de color de Tailwind. Por ejemplo, la acción de marca normal hace referencia a blue-700, mientras que su función de estado al pasar el cursor, con más énfasis, hace referencia a blue-800. La especificación conserva esas referencias para que se pueda distinguir la función semántica de un valor de color primitivo. La ilustración del equipaje reutiliza las mismas funciones de marca, pero no se presenta como una ilustración oficial de Flowbite.

Consulta la especificación complementaria

Sistema de diseño Flowbite: la geometría del tema y la maquetación de Tailwind trabajan en conjunto

La geometría del tema y la maquetación de Tailwind trabajan en conjunto

El radius-base del tema predeterminado es de doce píxeles y rounded-base se usa en los contenedores principales, los controles del panel lateral y el aviso de resultado. También define radios distintos de dos, cuatro, seis, ocho y dieciséis píxeles. Por eso es importante importar el tema cuando un componente copiado utiliza los nombres de clase semánticos más recientes.

Inter encabeza la pila de fuentes proporcionada, pero esta vista previa autocontenida no descarga fuentes remotas. Usa la fuente alternativa del sistema disponible. El espaciado de página sigue las clases de utilidad de Tailwind: p-6 equivale a un rem y medio, gap-8 a dos rem y el p-10 de escritorio a dos rem y medio. Estas clases de utilidad de maquetación no se presentan como una escala de espaciado Flowbite inventada y separada.

Consulta la especificación complementaria

Sistema de diseño Flowbite: una instancia del acordeón gestiona tres categorías

Una instancia del acordeón gestiona tres categorías

JavaScript crea un Accordion a partir de una matriz de elementos. Cada elemento tiene un ID estable, un elemento activador y un panel de destino; la categoría de papel aparece activa al inicio. alwaysOpen es false, por lo que al abrir Herramientas se cierra Papel. Las clases activeClasses e inactiveClasses personalizadas usan los nombres semánticos de texto y superficie del tema predeterminado.

La clase controla la visibilidad del panel y actualiza aria-expanded en el elemento activador. El marcado incluye aria-controls y los ID correspondientes de los paneles. Las casillas de la lista siguen en el documento cuando se contrae un panel, de modo que su estado marcado se conserva al cambiar de categoría. Contraer una sección cambia su visibilidad; no reinicia el trabajo del usuario al preparar el equipaje.

Consulta la especificación complementaria

Sistema de diseño Flowbite: el progreso se calcula a partir de las casillas reales

El progreso se calcula a partir de las casillas reales

Seis casillas reales representan materiales concretos para el taller. La aplicación calcula el número de elementos preparados, el siguiente elemento y el texto sobre los elementos pendientes a partir del estado marcado actual. El ancho de la barra de progreso y aria-valuenow se actualizan a partir de ese mismo recuento; así, no hay un contador independiente que pueda desincronizarse de la lista.

Las hojas de dibujo y el papel de calco son opciones separadas porque su preparación es distinta. La alfombrilla de corte corresponde a una estación compartida, y la cinta de baja adhesión incluye una advertencia sobre las superficies de las paredes. Esos detalles concretos hacen útil la categoría desplegada; el acordeón no se limita a ocultar párrafos genéricos repetidos.

  1. Abre Papel y marca Hojas de dibujo como preparadas.
  2. Abre Herramientas, marca Lápices y rotuladores como preparados y vuelve a Papel.
  3. Comprueba que ambas opciones sigan seleccionadas y que el resumen indique dos de seis.

Consulta la especificación complementaria

Sistema de diseño Flowbite: una instancia del panel lateral gestiona la visibilidad y la capa de fondo

Una instancia del panel lateral gestiona la visibilidad y la capa de fondo

El panel de materiales se inicializa mediante new Drawer con placement right, backdrop true y bodyScrolling false. Al abrir el panel, se llama a show; al cerrarlo, se llama a hide. La implementación nativa de Flowbite aplica las clases de posicionamiento y transición, el fondo superpuesto y los atributos de visibilidad. Esta página usa deliberadamente JavaScript API, en lugar de combinarlo con un segundo inicializador de atributos de datos para el mismo panel.

El ancho del cajón es de veinticuatro rem y usa max-w-full, por lo que sigue siendo práctico en ventanas estrechas. El contenido puede desplazarse verticalmente dentro del panel. La altura de la página depende de su contenido; h-screen del cajón es una superposición fija intencional y no crea un ciclo de altura mínima en la página integrada.

Consulta la especificación complementaria

Sistema de diseño de Flowbite: añadir gestión del foco al ciclo de vida del cajón

Añade la gestión del foco al ciclo de vida del panel lateral

La devolución de llamada onShow hace que el elemento main del fondo sea inert y enfoca el campo Prepared by. onHide elimina inert y devuelve el foco a la nota Prepare materials. Un pequeño controlador de keydown recorre con Tab y Shift+Tab los controles entre el primero y el último del panel. Estas mejoras aparecen en el código fuente completo; no se presupone que las proporcione una clase de estilo.

Flowbite gestiona Escape en su cajón. Las devoluciones de llamada del ejemplo garantizan que, independientemente de cómo se cierre, el fondo vuelva a ser interactivo. El panel está etiquetado con aria-labelledby y el control de cierre tiene un nombre accesible explícito. En una aplicación real, este comportamiento debe probarse junto con sus propios portales y su enrutamiento; el nombre de una biblioteca no garantiza por sí solo la accesibilidad.

Consulta la especificación complementaria

Sistema de diseño de Flowbite: validar a la persona responsable y guardar solo texto local

Valida al responsable y guarda solo texto local

El campo Prepared by es obligatorio y tiene límites de longitud mínima y máxima. Además, el controlador de envío elimina los espacios sobrantes del nombre y rechaza las entradas que solo contienen espacios en blanco. Session note es opcional y admite un máximo de 240 caracteres. El resumen de elementos pendientes se actualiza al abrir el cajón, de modo que refleja la lista de verificación actual y no un estado de preparación anterior.

Al guardar, se cierra el cajón y se anuncia una nota local con la persona responsable, la cantidad de elementos preparados y el texto opcional. No se envía ningún correo ni se crea ningún documento compartido. Las cadenas proporcionadas por el usuario se asignan mediante textContent. Al editar la lista de verificación, se borra el aviso del resultado anterior, ya que la cantidad previa podría resultar engañosa.

Consulta la especificación complementaria

Sistema de diseño de Flowbite: incluir las clases generadas por la biblioteca JavaScript

Incluye las clases generadas por la biblioteca JavaScript

La entrada de Tailwind importa el tema predeterminado de Flowbite y registra flowbite/plugin. Las directivas source explícitas abarcan HTML, el módulo de la aplicación y la biblioteca ESM de Flowbite. Esta última ruta es importante: las clases que la biblioteca añade en tiempo de ejecución deben estar presentes en la hoja de estilos generada, aunque no se hayan escrito directamente en HTML al inicio.

El paquete importa Accordion y Drawer de flowbite. El ejemplo proporcionado inicializa cada instancia una sola vez, después de que exista su marcado. Las aplicaciones basadas en frameworks que montan y desmontan vistas deben vincular la configuración del ciclo de vida con la limpieza de las instancias para evitar oyentes duplicados. La página local solo se monta una vez y no tiene transiciones de rutas del lado del cliente.

Consulta la especificación complementaria

Sistema de diseño de Flowbite: una guía de preparación con límites de implementación claros

Una ayuda para preparar el equipaje con límites de implementación visibles

La guía de campo muestra un acordeón con mucho contenido, estado persistente de las casillas y un flujo de trabajo con superposición. No incluye datos de inventario inventados ni resultados de compra remotos. Los seis materiales son tareas de muestra para preparar un taller, y la nota guardada permanece en la memoria mientras la página está abierta.

El tema semántico predeterminado, las clases de componentes y el comportamiento de JavaScript provienen de Flowbite; el contenido del taller, la ilustración original y las mejoras de gestión del foco son código de la aplicación. Esta separación permite al lector reutilizar una composición práctica y, al mismo tiempo, comprender qué responsabilidades cubre realmente la biblioteca.

  • Usa la instancia con estado de Flowbite para controlar la visibilidad del panel.
  • Mantén los datos de la lista de verificación y el progreso derivado en la lógica de la aplicación.
  • Gestiona las compras reales o la persistencia compartida solo mediante una integración explícita con un backend.

Consulta la especificación complementaria

Ejemplos de componentes del sistema de diseño de Flowbite

Marcado de la guía de preparación y del cajón

Clases del tema semántico, controles de casilla reales y paneles de acordeón 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>

Referencia de código

  • Los botones se conectan a los ID de los paneles mediante aria-controls.
  • El encabezado etiqueta el cajón.
  • La barra de progreso muestra el mismo recuento que ven los usuarios videntes.

Instancias nativas de Flowbite y estado local

Inicialización de Accordion/Drawer, además de la gestión de la lista de verificación y del foco específica de la aplicación.

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();

Referencia de código

  • Una instancia de Accordion controla las tres categorías.
  • Las devoluciones de llamada del ciclo de vida del cajón hacen que el fondo sea inert y restauran el foco.
  • El ciclo del foco es una mejora explícita de la aplicación.

Ilustración original de preparación y elementos complementarios de CSS

Detalles de la composición de la aplicación alrededor de las utilidades nativas.

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}}

Referencia de código

  • La geometría del papel, el lápiz y la regla es una ilustración decorativa original de CSS.

Documento index.html completo

Usa la compilación de la hoja de estilos y el código de interacción completo proporcionados arriba.

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>

Referencia de código

  • Guarda la interacción proporcionada como main.js y compílala en bundle.js, como se muestra en la configuración.
  • Se incluyen la ventana gráfica y la carga de recursos nativos.
04

Configuración del agente para el sistema de diseño de Flowbite

Punto de partida para la implementación

Verificado con Flowbite 4.0.2 y Tailwind CSS 4.3.3. Adapta la ruta del código fuente en node_modules a la ubicación real de input.css. No se necesitan fuentes 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. */

Una instrucción para tu proyecto

Instrucción para el agente
Usa la guía completa de preparación para talleres de Flowbite 4.0.2, incluidos el descubrimiento de fuentes de Tailwind y la inicialización nativa de Accordion y Drawer. Mantén los grupos de materiales y el estado de la lista de verificación vinculados a la guía, y valida la información de la persona responsable antes de guardar una nota local de preparación. Conserva el foco del teclado del cajón, la gestión inert del fondo y el comportamiento de cierre. Mantén la ilustración original CSS separada del tema semántico de la biblioteca. No añadas solicitudes de servicio ni envíos externos a este flujo de trabajo local de preparación.
05

Fuentes y alcance del sistema de diseño de Flowbite

Flowbite 4.0.2 con su tema predeterminado. El contenido de preparación, las ilustraciones decorativas y las mejoras de gestión del foco son originales. Las notas sobre materiales se mantienen localmente.