npm.io
0.1.10 • Published 2d ago

glubox

Licence
MIT
Version
0.1.10
Deps
0
Size
543 kB
Vulns
0
Weekly
0

gluBox

Librería de componentes React para aplicaciones empresariales: Sidebar con RBAC, PageActionsMenu, DataGrid, controles de formulario, botones y 3 temas globales (Indigo / Emerald / Blue) en modo claro y oscuro.

Instalación

pnpm add glubox
import {
  DataGrid,
  Sidebar,
  PageActionsMenu,
  pageActionsFromNode,
  findNavigationNodeByRoute,
  Button,
  Select,
  TextBox,
  DateBox,
  RangeDateBox,
  OptionGroup,
  CheckButton,
  Popup,
  ToastProvider,
  useToast,
  hasPermission,
  filterVisibleMenu,
} from 'glubox';
import type { ColumnDef, NavigationNode } from 'glubox';
import 'glubox/style.css';
import 'glubox/themes/default.css'; // o modern.css, enterprise.css, index.css

Tipado de eventos:

import type {
  SelectOnChangeHandler,
  PopupOnCloseHandler,
  ToastShowHandler,
  DataGridOnPageChangeHandler,
} from 'glubox';

Componentes

Componente Descripción
DataGrid Tabla/cards: dataSource: T[] plano + keyExpr + columns + paging
Sidebar Navegación lateral, menú desde API, RBAC, 3 niveles
PageActionsMenu Hamburguesa de acciones (NavigationNode / surface: actions)
Button Botón con variantes y temas
TextBox Campo de texto con label top / floating / outlined / left
TextArea Multilínea
Select Desplegable con teclado y búsqueda type-ahead
DateBox Selector de fecha con calendario
RangeDateBox Rango de fechas en un solo control
OptionGroup Selección exclusiva (vertical, horizontal, segmented)
CheckButton Toggle con semántica checkbox
Popup Diálogo modal arrastrable con acciones en el pie
Toast Notificaciones con posicionamiento, timer y animaciones

Documentación: https://solivoo.github.io/gluebox/ · tipos de eventos en docs/guide/event-types.md.

Uso rápido

DataGrid
interface Row extends Record<string, unknown> {
  id: number;
  name: string;
}

const columns: ColumnDef<Row>[] = [
  { key: 'name', header: 'Nombre', sortable: true },
];

<DataGrid
  dataSource={[{ id: 1, name: 'Ana' }]}  // T[] planono { items }
  keyExpr="id"
  columns={columns}
  paging={{ enabled: true, pageIndex: 0, pageSize: 10 }}
/>

Estructura: cada fila es un objeto; dataSource es el array; keyExpr nombra el campo clave. Guía: DataGrid.

Sidebar
<Sidebar
  menu={menuConfig}
  userPermissions={userPermissions}
  activePath={pathname}
  onNavigate={navigate}
  renderIcon={renderMenuIcon}
  theme="dark"
  collapseOthersOnSelect
/>
PageActionsMenu
const active = findNavigationNodeByRoute(navigation, pathname);
const actions = pageActionsFromNode(active);

<PageActionsMenu
  items={actions}
  renderIcon={renderMenuIcon}
  onNavigate={(route) => navigate('/' + route)}
/>

Guía: PageActionsMenu.

Formularios
<TextBox label="Email" placeholder="nombre@correo.com" clearable />

<Select
  options={[{ value: '1', label: 'Opción 1' }]}
  label="País"
  labelPosition="outlined"
  placeholder="Seleccionar..."
/>

<DateBox label="Vencimiento" labelPosition="outlined" variant="outline" />

<OptionGroup
  label="Plan"
  layout="segmented"
  options={[
    { value: 'basic', label: 'Basic' },
    { value: 'pro', label: 'Pro' },
  ]}
/>
Popup y Toast
<Popup open={open} onClose={() => setOpen(false)} title="Confirmar" width={480}>
  Contenido del diálogo
</Popup>

// Envolver la app con ToastProvider
const { show } = useToast();
show({ title: 'Guardado', message: 'Cambios aplicados.', variant: 'success' });
Label outlined y canvas

Con labelPosition="outlined" el control es transparente y el label se apoya en el fondo del contenedor. Si el formulario está sobre una card, define el canvas en el padre:

.mi-card {
  --glb-field-canvas: var(--glb-surface);
}
Temas globales
import 'glubox/themes/enterprise.css';

document.documentElement.setAttribute('data-theme', 'enterprise');
document.documentElement.setAttribute('data-mode', 'dark');
Tema Acento
default Periwinkle pastel
modern Sage pastel
enterprise Powder blue pastel

Cada componente acepta además su prop theme (light, dark, presets como modern-dark, o tokens custom).

Documentación completa del sistema de temas: docs/guide/themes.md (VitePress) o pnpm docs:devTemas y apariencia.

Desarrollo

pnpm install
pnpm dev              # Demo interactiva (playground)
pnpm docs:dev         # Documentación VitePress
pnpm build:lib        # Build para npm
pnpm publish:lib      # prepublish:lib + npm publish (tras npm login)
pnpm docs:build       # Build docs → GitHub Pages
Publicar en npm (manual)
pnpm install
pnpm build:lib
npm login
npm publish --access public
# o: pnpm publish:lib

Estructura del repo

src/components/       # Componentes publicados en npm
src/demo/             # Demo interactiva (no se publica)
src/styles/           # Temas CSS y tokens globales
docs/                 # Documentación VitePress

Licencia

MIT

Keywords