@regcheq/ui 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +242 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,27 +1,255 @@
|
|
|
1
|
-
# @regcheq/
|
|
1
|
+
# @regcheq/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Librería interna de componentes UI para aplicaciones Regcheq. Basada en Radix UI + Tailwind CSS v4 + CVA (class-variance-authority), con salida dual CJS + ESM.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
## Objetivos
|
|
7
|
+
|
|
8
|
+
- Componentes accesibles y consistentes basados en Radix UI.
|
|
9
|
+
- Sistema de tokens semánticos `--rq-*` para theming centralizado.
|
|
10
|
+
- Variantes visuales definidas con CVA — sin clases condicionales ad-hoc.
|
|
11
|
+
- Exports con prefijo `Rq` para evitar colisiones de nombres en los consumidores.
|
|
12
|
+
- Build dual (CJS + ESM) para compatibilidad con proyectos Next.js, Vite y CRA.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Instalación
|
|
6
16
|
|
|
7
17
|
```bash
|
|
8
|
-
|
|
18
|
+
npm i @regcheq/ui
|
|
9
19
|
```
|
|
10
20
|
|
|
11
|
-
|
|
21
|
+
Además, el proyecto usa Tailwind CSS v4. Asegúrate de importar los estilos base en tu app:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import "@regcheq/ui/styles";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Requisitos para desarrollo
|
|
29
|
+
|
|
30
|
+
El proyecto usa **Node 22**. Con [nvm](https://github.com/nvm-sh/nvm) instalado:
|
|
12
31
|
|
|
13
32
|
```bash
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
pnpm storybook # Levantar Storybook en localhost:6006
|
|
17
|
-
pnpm test # Correr tests
|
|
18
|
-
pnpm lint # Revisar errores de linting
|
|
19
|
-
pnpm format # Formatear codigo
|
|
20
|
-
pnpm typecheck # Verificar tipos
|
|
33
|
+
nvm use
|
|
34
|
+
npm ci
|
|
21
35
|
```
|
|
22
36
|
|
|
23
|
-
|
|
37
|
+
El archivo `.nvmrc` fija la versión; `nvm use` cambia al Node correcto automáticamente.
|
|
38
|
+
|
|
39
|
+
**Husky** ejecuta antes de cada commit:
|
|
40
|
+
|
|
41
|
+
- **pre-commit**: `npm run lint` y `npm run test` (no se permite commit si fallan).
|
|
42
|
+
- **commit-msg**: **commitlint** para que los mensajes sigan [Conventional Commits](https://www.conventionalcommits.org/) (ej. `feat:`, `fix:`, `chore:`). Evita commits con mensajes mal formados.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Guía rápida: integrar en tu primera app (React + Vite)
|
|
46
|
+
|
|
47
|
+
### 1. Instalar la dependencia
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm i @regcheq/ui
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Importar estilos base
|
|
54
|
+
|
|
55
|
+
En el punto de entrada de tu app (ej. `src/main.tsx`):
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import "@regcheq/ui/styles";
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3. Envolver la app con `RqProvider`
|
|
62
|
+
|
|
63
|
+
`RqProvider` provee el contexto necesario para componentes como tooltips y popovers de Radix:
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
// src/main.tsx
|
|
67
|
+
import React from "react";
|
|
68
|
+
import ReactDOM from "react-dom/client";
|
|
69
|
+
import { RqProvider } from "@regcheq/ui";
|
|
70
|
+
import "@regcheq/ui/styles";
|
|
71
|
+
import App from "./App";
|
|
72
|
+
|
|
73
|
+
ReactDOM.createRoot(document.getElementById("root")!).render(
|
|
74
|
+
<React.StrictMode>
|
|
75
|
+
<RqProvider>
|
|
76
|
+
<App />
|
|
77
|
+
</RqProvider>
|
|
78
|
+
</React.StrictMode>
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 4. Usar componentes
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import { RqButton, RqInput, RqAlert } from "@regcheq/ui";
|
|
86
|
+
|
|
87
|
+
export function LoginForm() {
|
|
88
|
+
return (
|
|
89
|
+
<form>
|
|
90
|
+
<RqAlert variant="info">Ingresa tus credenciales.</RqAlert>
|
|
91
|
+
<RqInput placeholder="Correo electrónico" type="email" />
|
|
92
|
+
<RqButton variant="primary" type="submit">Ingresar</RqButton>
|
|
93
|
+
</form>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 5. Resumen de pasos
|
|
99
|
+
|
|
100
|
+
| Paso | Acción |
|
|
101
|
+
|------|--------|
|
|
102
|
+
| 1 | `npm i @regcheq/ui` |
|
|
103
|
+
| 2 | Importar `"@regcheq/ui/styles"` en el entry point. |
|
|
104
|
+
| 3 | Envolver la app con `<RqProvider>`. |
|
|
105
|
+
| 4 | Importar y usar los componentes con prefijo `Rq`. |
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
## Uso básico
|
|
24
109
|
|
|
25
110
|
```tsx
|
|
26
|
-
import {
|
|
111
|
+
import {
|
|
112
|
+
RqButton,
|
|
113
|
+
RqInput,
|
|
114
|
+
RqPasswordInput,
|
|
115
|
+
RqTextarea,
|
|
116
|
+
RqSelect, RqSelectTrigger, RqSelectContent, RqSelectItem, RqSelectValue,
|
|
117
|
+
RqAlert,
|
|
118
|
+
RqCard,
|
|
119
|
+
RqLabel,
|
|
120
|
+
RqSeparator,
|
|
121
|
+
RqCalendar,
|
|
122
|
+
RqDatePickerInput,
|
|
123
|
+
RqSidebar, RqSidebarContent, RqSidebarItem, RqSidebarFooter, RqSidebarToggle,
|
|
124
|
+
RqDrawer, RqDrawerContent, RqDrawerHeader, RqDrawerTitle,
|
|
125
|
+
} from "@regcheq/ui";
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
## Componentes disponibles
|
|
130
|
+
|
|
131
|
+
| Componente | Descripción |
|
|
132
|
+
|------------|-------------|
|
|
133
|
+
| `RqButton` | Botón con variantes `primary`, `secondary`, `tertiary`, `ghost` |
|
|
134
|
+
| `RqInput` | Input de texto base |
|
|
135
|
+
| `RqPasswordInput` | Input de contraseña con toggle de visibilidad |
|
|
136
|
+
| `RqTextarea` | Área de texto multilínea |
|
|
137
|
+
| `RqLabel` | Etiqueta accesible para campos de formulario |
|
|
138
|
+
| `RqSelect` + partes | Select accesible basado en Radix Select |
|
|
139
|
+
| `RqPopover` + partes | Popover basado en Radix Popover |
|
|
140
|
+
| `RqCalendar` | Calendario de selección de fechas (react-day-picker) |
|
|
141
|
+
| `RqDatePickerInput` | Input con picker de fecha integrado |
|
|
142
|
+
| `RqAlert` | Alerta con variantes `info`, `success`, `warning`, `error` |
|
|
143
|
+
| `RqCard` | Tarjeta contenedora |
|
|
144
|
+
| `RqSeparator` | Divisor horizontal/vertical |
|
|
145
|
+
| `RqField` + partes | Sistema de layout para campos de formulario |
|
|
146
|
+
| `RqFormField` + partes | Integración con `react-hook-form` |
|
|
147
|
+
| `RqInputGroup` + partes | Input con addons (prefijo / sufijo / botón) |
|
|
148
|
+
| `RqSidebar` + partes | Sidebar colapsable con hover-expand |
|
|
149
|
+
| `RqDrawer` + partes | Drawer (panel deslizante) con soporte multi-dirección |
|
|
150
|
+
| `RqLogo` + variantes | Logos y marcas de Regcheq |
|
|
151
|
+
| `RqProvider` | Proveedor de contexto global de la librería |
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## Tokens CSS (theming)
|
|
155
|
+
|
|
156
|
+
Los componentes usan exclusivamente **tokens semánticos** `--rq-*`. Para personalizar el tema, sobreescribe las variables en tu CSS global:
|
|
157
|
+
|
|
158
|
+
```css
|
|
159
|
+
:root {
|
|
160
|
+
--color-rq-brand: hsl(220 70% 30%);
|
|
161
|
+
--color-rq-brand-on: hsl(0 0% 100%);
|
|
162
|
+
--color-rq-brand-hover: hsl(220 70% 25%);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Tokens disponibles:
|
|
167
|
+
|
|
27
168
|
```
|
|
169
|
+
--color-rq-brand fondo principal
|
|
170
|
+
--color-rq-brand-on texto sobre brand
|
|
171
|
+
--color-rq-brand-hover hover de brand
|
|
172
|
+
--color-rq-brand-subtle fondo suave de brand
|
|
173
|
+
--color-rq-surface fondo de superficie
|
|
174
|
+
--color-rq-surface-selected fondo seleccionado
|
|
175
|
+
--color-rq-text texto principal
|
|
176
|
+
--color-rq-border borde estándar
|
|
177
|
+
--color-rq-border-subtle borde suave
|
|
178
|
+
--color-rq-focus anillo de focus
|
|
179
|
+
--color-rq-status-success / -subtle
|
|
180
|
+
--color-rq-status-error / -subtle
|
|
181
|
+
--color-rq-status-warning / -subtle
|
|
182
|
+
--color-rq-status-info / -subtle
|
|
183
|
+
--color-rq-status-notification / -subtle
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
## Versioning (SemVer)
|
|
188
|
+
|
|
189
|
+
Este paquete sigue SemVer:
|
|
190
|
+
|
|
191
|
+
- `PATCH`: fixes internos sin cambios de API.
|
|
192
|
+
- `MINOR`: nuevos componentes o props compatibles.
|
|
193
|
+
- `MAJOR`: cambios que rompen compatibilidad (props eliminadas, renombradas, comportamientos incompatibles).
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
## Commits (Conventional Commits)
|
|
197
|
+
|
|
198
|
+
El release automático usa Conventional Commits. Ejemplos:
|
|
199
|
+
|
|
200
|
+
- `feat: agrega componente Badge` → MINOR
|
|
201
|
+
- `fix: corrige clases de focus en Input` → PATCH
|
|
202
|
+
- `feat!: renombra prop variant en Alert` → MAJOR
|
|
203
|
+
|
|
204
|
+
O con breaking change explícito:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
feat: agrega componente Badge
|
|
208
|
+
|
|
209
|
+
BREAKING CHANGE: el export RqBadge reemplaza a RqTag (eliminado)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Tipos comunes: `feat`, `fix`, `chore`, `docs`, `refactor`, `test`.
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
## Scripts útiles
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
npm test # Jest — todos los tests
|
|
219
|
+
npm run test:watch # Jest en modo watch
|
|
220
|
+
npm run test:coverage # Reporte de cobertura
|
|
221
|
+
npm run coverage:ci # Cobertura en formato lcov (para SonarCloud)
|
|
222
|
+
npm run typecheck # tsc --noEmit
|
|
223
|
+
npm run lint # ESLint
|
|
224
|
+
npm run lint:fix # Auto-fix ESLint
|
|
225
|
+
npm run format # Prettier
|
|
226
|
+
npm run storybook # Storybook en localhost:6006
|
|
227
|
+
npm run build # Build de la librería (dist/)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
## Storybook
|
|
232
|
+
|
|
233
|
+
El catálogo de componentes se publica automáticamente en GitLab Pages en cada merge a `master`. Para verlo en local:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
npm run storybook
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Accede a [http://localhost:6006](http://localhost:6006).
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
## Desarrollo de nuevos componentes
|
|
243
|
+
|
|
244
|
+
Sigue el patrón de la carpeta `src/components/ui/<component-name>/`:
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
badge/
|
|
248
|
+
├── badge.tsx ← componente con forwardRef + CVA
|
|
249
|
+
├── badge.test.tsx ← tests co-localizados
|
|
250
|
+
└── index.ts ← barrel local
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Registra el nuevo componente en `src/components/ui/index.ts` con prefijo `Rq` y crea su story en `stories/<component-name>.stories.tsx`.
|
|
254
|
+
|
|
255
|
+
Consulta el archivo `CLAUDE.md` en la raíz para la guía completa de convenciones.
|