Files
design_system/docs/research.md
T
2026-08-10 04:29:24 -06:00

4.4 KiB

Investigación y decisiones

Investigación realizada el 10 de agosto de 2026. Se priorizaron fuentes oficiales y especificaciones.

Fuentes consultadas

Decisiones derivadas

Distribución

Vite construye una entrada ES y externaliza Vue. El paquete publica declaraciones TypeScript, index.js y design-system.css. vue es peerDependency para evitar dos runtimes en una aplicación.

El CSS se importa desde la entrada durante el build para garantizar su extracción, pero se expone como @omaresquivel/design-system/style.css y se documenta su importación explícita. sideEffects conserva los archivos CSS durante tree-shaking.

Tailwind y estilos

Se distribuye CSS compilado. Esta decisión evita que cada consumidor instale Tailwind, configure @source para node_modules o replique bloques @apply. Tailwind queda como herramienta interna y el resultado se controla mediante variables CSS semánticas.

Los componentes usan clases globales con namespace ds- en una única capa components. No se ejecuta Tailwind por cada <style scoped>, siguiendo su advertencia sobre el coste y el contexto aislado de los estilos SFC. Los nombres prefijados evitan colisiones y las variables conservan la capacidad de theming.

Accesibilidad

  • Controles de formulario nativos antes que widgets ARIA recreados.
  • <dialog>.showModal() para obtener top layer e inertización nativas en los navegadores objetivo.
  • Tabs implementadas con el patrón APG y activación automática porque sus paneles son locales e inmediatos.
  • Estados dinámicos anuncian status o alert solo mediante la prop live; contenido estático no se anuncia al montar.
  • Foco visible global de 2 px y controles de altura mínima entre 36 y 48 px.

Alternativas descartadas

  • Distribuir solamente fuentes Tailwind: obligaría al consumidor a escanear la librería y lo acoplaría a Tailwind.
  • Incluir Vue en el bundle: produciría runtimes duplicados y rompería expectativas de plugins e inyección.
  • Adoptar una librería visual completa: sustituiría el lenguaje propio en lugar de estandarizarlo.
  • Implementar todos los widgets con ARIA: aumenta el riesgo frente a controles HTML nativos.
  • Storybook en la primera versión: el playground separado ya valida la API pública y los casos de producto con menos infraestructura.
  • Modo oscuro inicial: requiere una revisión visual y de contraste independiente; queda en el roadmap.