Skip to content

Temas y apariencia

gluBox usa dos capas de tematización que pueden combinarse:

  1. Temas globales CSS — variables --glb-* vía data-theme y data-mode en <html>.
  2. Tema por componente — prop theme con preset string u objeto de tokens (inline styles).

Importación de estilos

tsx
// Obligatorio: fuente Poppins + tokens base
import 'glubox/style.css';

// Un tema global (recomendado en producción)
import 'glubox/themes/default.css';

// O los tres temas para cambiar en runtime
// import 'glubox/themes/index.css';

Temas globales (data-theme + data-mode)

Activá el tema en el documento:

tsx
document.documentElement.setAttribute('data-theme', 'default');
document.documentElement.setAttribute('data-mode', 'dark');
data-themePaleta de acento (pastel)Archivo npm
defaultPeriwinkle (indigo suave)glubox/themes/default.css
modernSage (verde suave)glubox/themes/modern.css
enterprisePowder blue (azul suave)glubox/themes/enterprise.css
data-modeEfecto
lightFondos claros, texto oscuro
darkFondos oscuros, texto claro

Los tres archivos comparten la misma estructura de tokens (--glb-app-bg, --glb-surface, --glb-border, --glb-accent-*, variables por componente como --btn-primary-bg, etc.).

Cambiar tema en runtime

tsx
function setTheme(name: 'default' | 'modern' | 'enterprise') {
  document.documentElement.setAttribute('data-theme', name);
}

function setMode(mode: 'light' | 'dark') {
  document.documentElement.setAttribute('data-mode', mode);
}

No hace falta JavaScript si el modo es fijo: podés dejar los atributos en index.html.

Tema por componente (theme prop)

Cada componente exporta presets TypeScript y acepta la prop theme:

ComponenteExport de presets
SidebarsidebarThemes
ButtonbuttonThemes
TextBoxtextBoxThemes
TextAreatextAreaThemes
SelectselectThemes
DateBoxdateBoxThemes
RangeDateBoxrangeDateBoxThemes
OptionGroupoptionGroupThemes
CheckButtoncheckButtonThemes
PopuppopupThemes
ToasttoastThemes

Presets disponibles (todos los componentes)

PresetDescripción
lightDefault family, modo claro
darkDefault family, modo oscuro
modern-lightModern family, claro
modern-darkModern family, oscuro
enterprise-lightEnterprise family, claro
enterprise-darkEnterprise family, oscuro
tsx
import { Button, buttonThemes } from 'glubox';

<Button theme="modern-dark">Guardar</Button>
<Select theme={selectThemes['enterprise-light']} options={options} />
<Popup theme="dark" open={open} onClose={onClose} title="Confirmar" />

La prop theme inyecta variables CSS en el elemento y prevalece sobre el tema global del documento para ese componente.

ToastProvider

tsx
<ToastProvider
  position="top-right"
  theme="enterprise-dark"
  defaultDuration={5000}
  showProgress
>
  {children}
</ToastProvider>

Si no pasás theme, Toast resuelve automáticamente según data-theme y data-mode del <html>.

Prioridad visual

prop theme (inline)  >  data-theme + data-mode (CSS global)  >  valores por defecto del componente

Label outlined y canvas

Con labelPosition="outlined" en formularios, el notch del label usa --glb-field-canvas (default: --glb-app-bg). En cards o paneles con otro fondo:

css
.mi-formulario {
  --glb-field-canvas: var(--glb-surface);
}

Ver Formularios.

Demo local

La app demo (pnpm dev) incluye selectores Theme y Mode en la barra superior; persisten en localStorage y aplican data-theme / data-mode al documento.

Componentes y documentación relacionada

ÁreaPágina
Formulariosforms.md
Botonesbuttons.md
Overlaysoverlays.md
Sidebarsidebar.md
Tipos de eventosevent-types.md

Siguiente paso

MIT License