@teams4soft/teams4soft-ui
v0.2.0
Published
Librería de componentes UI de Teams4Soft: React + TypeScript, tematizable y accesible.
Readme
@teams4soft/teams4soft-ui
Librería de componentes UI de Teams4Soft: React + TypeScript, tematizable, accesible y neutra.
Instalación
pnpm add @teams4soft/teams4soft-uiImporta los estilos una vez en el punto de entrada de tu app:
import "@teams4soft/teams4soft-ui/styles.css";Peer dependencies (Radix)
Algunos componentes usan primitivas de Radix UI como peer dependencies — no se instalan automáticamente, tu proyecto debe declararlas:
Tooltiprequiere@radix-ui/react-tooltip.CheckboxFieldrequiere@radix-ui/react-checkbox.RadioGrouprequiere@radix-ui/react-radio-group.- Los componentes con soporte
asChild(composición vía Slot, p. ej.Button) requieren@radix-ui/react-slot.
pnpm add @radix-ui/react-slot @radix-ui/react-tooltip @radix-ui/react-checkbox @radix-ui/react-radio-groupComponentes disponibles
Importables desde el paquete raíz (@teams4soft/teams4soft-ui) o desde los subpaths @teams4soft/teams4soft-ui/primitives, @teams4soft/teams4soft-ui/forms y @teams4soft/teams4soft-ui/layout:
- Button (
primitives) — botón con variantes, tamaños, estadoloadingy soporteasChild. - Tooltip / TooltipProvider (
primitives) — tooltip accesible sobre@radix-ui/react-tooltip. - FormField (
forms) — wiring de accesibilidad (label, descripción, error) para controles de formulario. - TextField (
forms) — campo de texto controlado/no controlado, con soporte declear, password yloading, integrado conFormField. - CheckboxField (
forms) — control booleano/indeterminado con label, descripción y error, sobre RadixCheckbox. - RadioGroup (
forms) — selección única de un conjunto de opciones, sobre RadixRadioGroup. - Fieldset (
layout) — agrupación semántica nativa de controles relacionados, sobre<fieldset>/<legend>. - FormGrid / FormGrid.Item (
layout) — grid responsivo para formularios, construido sobre CSS Grid + Tailwind.
Fase 2a: ejemplos mínimos
import { CheckboxField, FormField, RadioGroup, TextField } from "@teams4soft/teams4soft-ui/forms";
import { Fieldset, FormGrid } from "@teams4soft/teams4soft-ui/layout";
// CheckboxField
<CheckboxField
label="Acepto los términos"
checked={accepted}
onCheckedChange={(next) => setAccepted(next === true)}
/>;
// RadioGroup
<RadioGroup
label="Plan"
value={plan}
onValueChange={setPlan}
options={[
{ value: "basic", label: "Básico" },
{ value: "pro", label: "Pro" },
]}
/>;
// Fieldset (TextField no tiene prop `label`: se etiqueta envolviéndolo en FormField)
<Fieldset legend="Datos de contacto" description="Usamos esto solo para notificarte">
<FormField label="Email">
<TextField type="email" />
</FormField>
</Fieldset>;
// FormGrid
<FormGrid columns={{ base: 1, md: 2 }} gap="md">
<FormGrid.Item span={{ base: 1, md: 2 }}>
<FormField label="Nombre completo">
<TextField />
</FormField>
</FormGrid.Item>
<FormField label="Ciudad">
<TextField />
</FormField>
</FormGrid>;Utilidades
cn(...classes)— combina clases y resuelve conflictos de Tailwind (las últimas ganan).composeEventHandlers(theirs, ours)— compone handlers respetandopreventDefault.mergeRefs(...refs)— combina varias refs en una.
Estado
En construcción por fases.
Publicación (mantenedores)
- Crear
NPM_TOKEN(token de automatización con 2FA) en la organización@teams4softy guardarlo como secret del repo. - Subir un tag y crear un GitHub Release → el workflow
release.ymlpublica con provenance.
