@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 +83 -0
- package/dist/index.cjs +674 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +222 -0
- package/dist/index.d.ts +222 -0
- package/dist/index.js +617 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +2 -0
- package/package.json +69 -0
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.
|