@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.
Files changed (2) hide show
  1. package/README.md +242 -14
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,27 +1,255 @@
1
- # @regcheq/components
1
+ # @regcheq/ui
2
2
 
3
- Libreria de componentes UI de Regcheq.
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
- ## Setup
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
- pnpm install
18
+ npm i @regcheq/ui
9
19
  ```
10
20
 
11
- ## Scripts
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
- pnpm build # Compilar la libreria
15
- pnpm build:watch # Compilar en modo watch
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
- ## Uso
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 { Button, Input, Calendar, DatePickerInput } from "@regcheq/components";
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regcheq/ui",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Componentes reutilizables de Regcheq",
5
5
  "author": "Regcheq SpA <admin@regcheq.com>",
6
6
  "license": "ISC",