@doscientos/ui 0.1.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 ADDED
@@ -0,0 +1,83 @@
1
+ # @doscientos/ui
2
+
3
+ Primitives React accesibles, rápidas y temables para los productos de Doscientos. No depende de Next.js, Astro, router, backend ni estado de datos.
4
+
5
+ ## Alcance de la primera versión
6
+
7
+ - Tokens CSS del backoffice y tema claro/oscuro.
8
+ - Controles: botón, input, textarea, label, badge, separadores, atajos de teclado y skeleton.
9
+ - Formularios: `Field`, descripción y errores accesibles.
10
+ - Navegación y overlays: tabs, tooltip, popover, `Dialog` y `ConfirmDialog` controlado.
11
+ - Búsqueda: `Combobox` composable sobre React Aria y `HighlightMatch` sin distinción de mayúsculas o acentos.
12
+ - Hooks: debounce, cambios no guardados y autosave sin acoplamiento a transporte o datos.
13
+
14
+ Los componentes de dominio, llamadas API, navegación, toasts y layouts permanecen en cada aplicación.
15
+
16
+ La única foundation de comportamiento interactivo es `react-aria-components`.
17
+ Los consumidores importan exclusivamente `@doscientos/ui`: React Aria queda
18
+ encapsulado para que las APIs, tokens y accesibilidad sean consistentes.
19
+
20
+ ## Uso en una aplicación React con Tailwind v4
21
+
22
+ Instala el paquete y React como dependencia de tu aplicación. Después, importa una sola vez los estilos compilados en el punto de entrada CSS.
23
+
24
+ ```css
25
+ @import "tailwindcss";
26
+ @import "@doscientos/ui/styles.css";
27
+ ```
28
+
29
+ ```tsx
30
+ import { Button, Field, FieldLabel, Input } from "@doscientos/ui";
31
+
32
+ export function ProfileName() {
33
+ return <Field><FieldLabel htmlFor="name">Nombre</FieldLabel><Input id="name" /><Button>Guardar</Button></Field>;
34
+ }
35
+ ```
36
+
37
+ Los proyectos pueden definir los tokens semánticos en `:root` o `.dark` para aplicar la marca del cliente; no deben modificar los componentes. `@doscientos/ui` no sobrescribe esos tokens y usa los valores del tema del backoffice como fallback cuando falte alguno.
38
+
39
+ ## Sugerencias y autocompletado
40
+
41
+ El combobox es composable: la aplicación controla datos, peticiones y caché; la UI resuelve el teclado, foco, filtrado, popup y selección accesible. `HighlightMatch` mantiene el texto original y encuentra coincidencias aunque cambien mayúsculas o acentos.
42
+
43
+ ```tsx
44
+ <Combobox items={clients} inputValue={query} onInputChange={setQuery}>
45
+ <ComboboxInput placeholder="Busca un cliente…" />
46
+ <ComboboxContent>
47
+ <ComboboxList emptyState="Sin resultados.">{(client) => <ComboboxItem
48
+ id={client.id} textValue={client.name}>
49
+ <HighlightMatch text={client.name} query={query} />
50
+ </ComboboxItem>}</ComboboxList>
51
+ </ComboboxContent>
52
+ </Combobox>
53
+ ```
54
+
55
+ ## Desarrollo
56
+
57
+ - `pnpm test`: pruebas unitarias y de renderizado.
58
+ - `pnpm typecheck`: contrato TypeScript.
59
+ - `pnpm build`: distribución JS, tipos y CSS Tailwind compilado.
60
+ - `pnpm storybook`: catálogo local en el puerto 6006.
61
+ - `pnpm build-storybook`: sitio estático en `storybook-static/`, listo para publicar en `ui.doscientos.es`.
62
+
63
+ ## Criterio de crecimiento
64
+
65
+ Un componente entra cuando ya resuelve dos contextos reales o una necesidad transversal de accesibilidad. No se incorporan entidades de negocio, consultas, rutas ni variaciones visuales exclusivas de un cliente.
66
+
67
+ ## Releases
68
+
69
+ Este paquete usa **Release Please** y Conventional Commits. Los PRs requieren
70
+ un título como `feat(ui): add command menu` o `fix: prevent focus loss` y deben
71
+ fusionarse con *squash merge* conservando ese título. Release Please abrirá un
72
+ PR con la versión y `CHANGELOG.md`; al fusionarlo, crea el tag, GitHub Release y
73
+ publica el paquete con npm Trusted Publishing y provenance.
74
+
75
+ Antes de activar este flujo, `modules/ui` debe vivir en su propio repositorio
76
+ GitHub y el publisher de npm debe vincular ese repositorio con
77
+ `.github/workflows/release.yml`. Los workflows ya están incluidos para que se
78
+ activen al trasladar el módulo a ese repositorio; no hace falta guardar un token
79
+ de npm en GitHub.
80
+
81
+ Proteged `main` para exigir CI y el check de título convencional, y permitid
82
+ solo *squash merge*: así el título validado se conserva como el commit que
83
+ Release Please analiza.