Huemul, ícono de devsChile

Chucao — el sistema de diseño de devsChile

Web Components hechos con StencilJS, publicados como @devschile/chucao. Identidad de marca, paleta, tipografía y componentes, listos para reusar.

Última versión publicada: 2.3.0 pnpm add @devschile/chucao@2.3.0

Componentes

Los componentes se renderizan acá en vivo, cargados desde el CDN (static.devschile.cl/chucao/latest/). Cada demo incluye el código de uso.

ch-accordion

@devschile/chucao/ch-accordion

Acordeón de apertura única; cada ítem es un botón accesible con panel role="region" (contenido por slot panel-<value>). Emite chChange.

<ch-accordion id="demo-accordion"></ch-accordion>

ch-alert

@devschile/chucao/ch-alert

Mensaje de estado en bloque, con tres variantes. warning se anuncia con role="alert"; default y positive usan role="status". Definir dismiss-label agrega un botón de cierre que emite chDismiss.

Los cambios se guardan solos mientras editas. Componente publicado en el CDN. No pudimos conectar con el servidor. Este aviso se puede cerrar.
<ch-alert>Los cambios se guardan solos mientras editas.</ch-alert>
<ch-alert variant="positive">Componente publicado en el CDN.</ch-alert>
<ch-alert variant="warning">No pudimos conectar con el servidor.</ch-alert>
<ch-alert id="demo-alert" dismiss-label="Descartar aviso">Este aviso se puede cerrar.</ch-alert>

ch-badge

@devschile/chucao/ch-badge

Etiqueta de estado compacta con tres variantes.

comunidad Disponible placeholder
<ch-badge>comunidad</ch-badge>
<ch-badge variant="positive">Disponible</ch-badge>
<ch-badge variant="warning">placeholder</ch-badge>

ch-button

@devschile/chucao/ch-button

Botón accesible con variantes primary/secondary/ghost/danger, tamaños sm/md/lg, estado loading con ch-spinner y render como enlace con href. Emite chClick.

Primario Secundario Ghost Eliminar Pequeño Grande Guardando Ver sitio +Agregar
<ch-button id="demo-button">Primario</ch-button>
<ch-button variant="secondary">Secundario</ch-button>
<ch-button variant="ghost">Ghost</ch-button>
<ch-button variant="danger">Eliminar</ch-button>
<ch-button size="sm">Pequeño</ch-button>
<ch-button size="lg">Grande</ch-button>
<ch-button loading>Guardando</ch-button>
<ch-button variant="secondary" href="https://devschile.cl" target="_blank">Ver sitio</ch-button>
<ch-button variant="ghost" label="Agregar"><span slot="start">+</span>Agregar</ch-button>

ch-card

@devschile/chucao/ch-card

Contenedor de superficie con blur, borde y una línea de acento en hover.

🔗 Links de la semana

Pasa el mouse — el borde y una línea de acento aparecen en hover.

Ver más
<ch-card>
  <h4>🔗 Links de la semana</h4>
  <p>Pasa el mouse — el borde y una línea de acento aparecen en hover.</p>
  <ch-button variant="secondary">Ver más</ch-button>
</ch-card>

ch-checkbox

@devschile/chucao/ch-checkbox

Casilla de verificación con label asociada, estado checked, estados hint/errorMessage y evento chChange.

<ch-checkbox label="Acepto los términos"></ch-checkbox>
<ch-checkbox id="demo-checkbox" label="Recibir novedades" checked></ch-checkbox>
<ch-checkbox label="Deshabilitado" disabled></ch-checkbox>

ch-divider

@devschile/chucao/ch-divider

Separador horizontal (por defecto) o vertical con aria-orientation.

Bloque superior

Bloque inferior

Izquierda Derecha
<ch-card>
  <p>Bloque superior</p>
  <ch-divider></ch-divider>
  <p>Bloque inferior</p>
  <div class="ch-flex ch-gap-sm" style="height: 3.5rem">
    <span>Izquierda</span>
    <ch-divider orientation="vertical"></ch-divider>
    <span>Derecha</span>
  </div>
</ch-card>

ch-drawer

@devschile/chucao/ch-drawer

Panel lateral deslizante sobre el <dialog> nativo, abierto con showModal(): el navegador se encarga del foco, del cierre con Escape y del backdrop, y la página de fondo queda bloqueada. Se ancla a side (start/end/top/bottom) y expone slots header, default y footer. Emite chOpen y chClose.

Abrir panel

Filtros

Panel lateral para navegación, edición o detalles rápidos.

CancelarAplicar
Abrir desde start

Navegación

Se desliza desde el borde inicial.

<ch-button id="demo-drawer-trigger">Abrir panel</ch-button>
<ch-drawer id="demo-drawer" label="Filtros" close-label="Cerrar panel"><h4 slot="header">Filtros</h4><p>Panel lateral para navegación, edición o detalles rápidos.</p><div slot="footer"><ch-button variant="ghost">Cancelar</ch-button><ch-button>Aplicar</ch-button></div></ch-drawer>
<ch-button id="demo-drawer-start-trigger" variant="secondary">Abrir desde start</ch-button>
<ch-drawer id="demo-drawer-start" label="Navegación" side="start" close-label="Cerrar panel"><h4 slot="header">Navegación</h4><p>Se desliza desde el borde inicial.</p></ch-drawer>

ch-emoji

@devschile/chucao/ch-emoji

Emoji inline desde el CDN de devsChile. Mapea nombres y alias a través de emoji-map.json y prueba extensiones (.png, .gif, .jpg, .svg) automáticamente. Tamaños: sm, md, lg, xl.

<ch-emoji name="huemul-love" size="xl"></ch-emoji>
<ch-emoji name="heart" size="lg"></ch-emoji>
<ch-emoji name="hypnotoad" size="lg"></ch-emoji>
<ch-emoji name="lmao" size="md"></ch-emoji>
<ch-emoji name="loading" size="sm"></ch-emoji>

ch-input

@devschile/chucao/ch-input

Campo de texto con label asociado vía id/for. Emite chInput (cada tecla) y chChange (al confirmar).

<ch-input id="demo-input" label="Correo" type="email" placeholder="tu@email.com"></ch-input>
<ch-input label="Contraseña" type="password" placeholder="••••••••" hint="Mínimo 8 caracteres"></ch-input>
<ch-input label="Usuario" invalid errorMessage="Este campo es obligatorio"></ch-input>

ch-modal

@devschile/chucao/ch-modal

Diálogo modal sobre el <dialog> nativo, abierto con showModal(): el navegador se encarga del foco, de marcar el resto de la página como inerte, del cierre con Escape y del backdrop. Se cierra además al hacer clic fuera del diálogo. Admite size (sm/md/lg) para el ancho máximo, ajustable también con la custom property --ch-modal-width. Emite chOpen y chClose.

Abrir diálogo Abrir ancho (lg)

¿Publicar al CDN?

Se publicará la versión actual de la librería. La acción no se puede deshacer.

Nueva transacción

Con size="lg" el diálogo llega a 48rem, suficiente para un formulario en dos columnas.

<ch-button id="demo-modal-trigger">Abrir diálogo</ch-button>
<ch-button id="demo-modal-lg-trigger" variant="secondary">Abrir ancho (lg)</ch-button>
<ch-modal id="demo-modal" label="Confirmar publicación" close-label="Cerrar diálogo"><h4 slot="heading">¿Publicar al CDN?</h4><p>Se publicará la versión actual de la librería. La acción no se puede deshacer.</p></ch-modal>
<ch-modal id="demo-modal-lg" size="lg" label="Nueva transacción" close-label="Cerrar diálogo"><h4 slot="heading">Nueva transacción</h4><p>Con <code>size="lg"</code> el diálogo llega a 48rem, suficiente para un formulario en dos columnas.</p></ch-modal>

ch-radio

@devschile/chucao/ch-radio

Grupo de selección única; las opciones se pasan por options. Emite chChange con el valor elegido.

<ch-radio id="demo-radio" label="Elige un tema"></ch-radio>

ch-segmented-control

@devschile/chucao/ch-segmented-control

Control segmentado para alternar entre pocas opciones mutuamente excluyentes. Las opciones se pasan por options; admite size (sm/md) y participa de formularios con name/value. Emite chChange con el valor elegido.

<ch-segmented-control id="demo-segmented" label="Tipo de movimiento"></ch-segmented-control>

ch-select

@devschile/chucao/ch-select

Select estilizado; las opciones se pasan por la prop options. Emite chChange.

<ch-select id="demo-select" label="País" placeholder="Elige un país"></ch-select>

ch-spinner

@devschile/chucao/ch-spinner

Indicador de carga en tres tamaños; hereda el color del texto que lo rodea. Con label se anuncia como role="status", sin él queda decorativo.

Guardando
<ch-spinner size="sm" label="Cargando"></ch-spinner>
<ch-spinner label="Cargando"></ch-spinner>
<ch-spinner size="lg" label="Cargando"></ch-spinner>
<ch-spinner style="color: var(--accent)" label="Cargando"></ch-spinner>
<ch-button variant="primary" loading>Guardando</ch-button>

ch-switch

@devschile/chucao/ch-switch

Interruptor on/off accesible (role="switch") con label asociada. Emite chChange.

<ch-switch label="Modo oscuro" checked></ch-switch>
<ch-switch id="demo-switch" label="Notificaciones"></ch-switch>
<ch-switch label="Deshabilitado" disabled></ch-switch>

ch-tabs

@devschile/chucao/ch-tabs

Pestañas accesibles (WAI-ARIA) con navegación por flechas; las opciones van por tabs y el panel activo recibe contenido por slot panel-<value>. Emite chChange.

<ch-tabs id="demo-tabs" label="Secciones"></ch-tabs>

ch-textarea

@devschile/chucao/ch-textarea

Área de texto con label asociada. Emite chInput (cada tecla) y chChange (al confirmar).

<ch-textarea id="demo-textarea" label="Mensaje" placeholder="Escribe aquí..." rows="4"></ch-textarea>

ch-tooltip

@devschile/chucao/ch-tooltip

Texto de ayuda que aparece al pasar el mouse y al enfocar con el teclado, con cuatro posiciones. El disparador y el texto van por slot (trigger y content) para que queden en el mismo árbol: así el aria-describedby resuelve y el texto llega a los lectores de pantalla. El disparador debe ser un elemento nativo enfocable.

Se publica al CDN Se publica al CDN Se publica al CDN Se publica al CDN
<ch-tooltip><button class="demo-tooltip-trigger" type="button" slot="trigger">Arriba</button><span slot="content">Se publica al CDN</span></ch-tooltip>
<ch-tooltip placement="bottom"><button class="demo-tooltip-trigger" type="button" slot="trigger">Abajo</button><span slot="content">Se publica al CDN</span></ch-tooltip>
<ch-tooltip placement="left"><button class="demo-tooltip-trigger" type="button" slot="trigger">Izquierda</button><span slot="content">Se publica al CDN</span></ch-tooltip>
<ch-tooltip placement="right"><button class="demo-tooltip-trigger" type="button" slot="trigger">Derecha</button><span slot="content">Se publica al CDN</span></ch-tooltip>

Colores

Un fondo oscuro con gradiente sutil, un solo acento vibrante (teal) usado con disciplina, y una paleta de marca separada para uso oficial/impreso. Valores definidos en chucao-tokens.json y consumidos como tokens CSS (var(--token-name)).

bg
#100a1c
Fondo base
surface
rgba(32,30,64,.6)
Tarjetas, inputs (con blur)
surface-hover
rgba(45,212,191,.08)
Fondo en hover
border
rgba(255,255,255,.08)
Borde en reposo
border-hover
rgba(45,212,191,.3)
Borde en hover
accent
#2dd4bf
Acento — texto, bordes, botones
accent-hover
#5ee8d4
Acento en hover
status.positive
#4ade80
Estados positivos
status.warning
#f87171
Estados de advertencia
text.primary
#ffffff
Texto principal
text.secondary
rgba(255,255,255,.55)
Texto atenuado
brand.huemul-dark
#85422b
Café oscuro de marca

Tipografía

Fira Sans para cuerpo y Inconsolata para títulos y código.

Inconsolata — títulos
Chucao, el sistema de diseño de la comunidad
500 600 700
Fira Sans — cuerpo
El sistema de diseño de devsChile, documentado para reusar en cualquier proyecto de la comunidad.
400 500 600 700
Escala de tamaños
Chucao, el sistema de diseño
xs
var(--typography-size-xs) — badges y metadata secundaria
Chucao, el sistema de diseño
sm
var(--typography-size-sm) — labels de campos
Chucao, el sistema de diseño
md
var(--typography-size-md) — cuerpo por defecto
Chucao, el sistema de diseño
lg
var(--typography-size-lg) — encabezados secundarios
Chucao, el sistema de diseño
xl
var(--typography-size-xl) — encabezados

Marca

El isotipo y el logotipo son las piezas no intercambiables del sistema — ver DESIGN.md para las reglas de uso.

Huemul con contorno blanco
huemul-icono-contorno.svg
huemul + contorno blanco
Para fondos oscuros
Huemul a color
huemul-icono.svg
full color, vector
Uso oficial
Huemul blanco
huemul-icono-blanco.svg
monocromo blanco
Para fondos oscuros
Logotipo devschile
devschile-wordmark.svg
logotipo
Wordmark de devsChile

Documentación

Guías de desarrollo, consumo, testing y release, publicadas en el repo.