@kapiuara/ui 0.1.0 → 0.2.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/LICENSE +20 -0
- package/README.md +38 -1
- package/dist/components/data/KapiTable.d.ts +6 -0
- package/dist/components/data/KapiTable.js +359 -330
- package/dist/components/data/KapiTableFilter.d.ts +4 -1
- package/dist/components/data/KapiTableFilter.js +31 -29
- package/dist/components/inputs/KapiFacetedSearch.d.ts +4 -1
- package/dist/components/inputs/KapiFacetedSearch.js +68 -66
- package/dist/components/layout/KapiShell.js +1 -0
- package/dist/kapi.css +1 -1
- package/dist/kapi.layered.css +1 -1
- package/package.json +21 -20
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2026 Nicolás Arquiel
|
|
2
|
+
|
|
3
|
+
Todos los derechos reservados.
|
|
4
|
+
|
|
5
|
+
Esta licencia cubre el paquete `@kapiuara/ui`: su código fuente, los artefactos
|
|
6
|
+
compilados que distribuye, su documentación y sus recursos.
|
|
7
|
+
|
|
8
|
+
La obra es propiedad del titular del copyright. No se concede ninguna licencia
|
|
9
|
+
ni derecho de uso, copia, modificación, fusión, publicación, distribución,
|
|
10
|
+
sublicencia ni venta, total o parcial, por el solo hecho de que un paquete esté
|
|
11
|
+
disponible públicamente en un registro.
|
|
12
|
+
|
|
13
|
+
La publicación en npm existe únicamente para que el titular distribuya e instale
|
|
14
|
+
la obra en sus propios sistemas. Cualquier otro uso requiere permiso escrito y
|
|
15
|
+
previo del titular, que puede solicitarse a través de su cuenta de npm
|
|
16
|
+
(`nicolas.arquiel`).
|
|
17
|
+
|
|
18
|
+
EL SOFTWARE SE ENTREGA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
|
|
19
|
+
IMPLÍCITA, INCLUIDAS ENTRE OTRAS LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA
|
|
20
|
+
UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN.
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Design system extraído del v2 de `ucugestionfront`. React 19 + TypeScript + Vit
|
|
|
4
4
|
CSS nativo propio scopeado bajo `.kapi` (tokens como custom properties). Sin Radix / Bootstrap /
|
|
5
5
|
Tailwind / Mantine. Iconos: sólo `lucide-react`. Fuente: Nunito.
|
|
6
6
|
|
|
7
|
-
>
|
|
7
|
+
> Publicado en npm como `@kapiuara/ui` (`0.1.0`, público): `npm i @kapiuara/ui`. El repo sigue siendo privado y el tarball lleva sólo `dist`. Ver `BRANDING.md` en la raíz del repo.
|
|
8
8
|
|
|
9
9
|
## Comandos
|
|
10
10
|
|
|
@@ -66,6 +66,43 @@ demo/ # playground: index.html, main.tsx, App.tsx, catalog.tsx, view
|
|
|
66
66
|
- `.kapi-row` ya existe (space-between); para filas con gap usá `.kapi-cluster`.
|
|
67
67
|
- Para sumar un componente al playground: una sección en `demo/catalog.tsx`.
|
|
68
68
|
|
|
69
|
+
## Accesibilidad: nombrar lo que se repite
|
|
70
|
+
|
|
71
|
+
Los componentes que emiten un **landmark** traen un nombre por defecto. Si ponés **dos del mismo tipo
|
|
72
|
+
en la misma página**, dejan de distinguirse para un lector de pantalla y hay que nombrarlos:
|
|
73
|
+
|
|
74
|
+
| Componente | Landmark | Nombre por defecto | Cómo se pisa |
|
|
75
|
+
| ------------------------------- | -------- | ---------------------- | ---------------------------------- |
|
|
76
|
+
| `KapiRail` | `nav` | "Navegación principal" | `aria-label` o `labels.navigation` |
|
|
77
|
+
| `KapiContextSlot` | `aside` | "Panel contextual" | `aria-label` o `labels.region` |
|
|
78
|
+
| `KapiBreadcrumb` | `nav` | "Ubicación" | `aria-label` o `labels.navigation` |
|
|
79
|
+
| `KapiPagination` | `nav` | "Paginación" | `aria-label` o `labels.nav` |
|
|
80
|
+
| `KapiTableFilter` | `search` | "Filtro de la tabla" | `aria-label` o `labels.region` |
|
|
81
|
+
| `KapiFacetedSearch` | `search` | "Búsqueda" | `aria-label` o `labels.region` |
|
|
82
|
+
| `KapiTable` (su filtro interno) | `search` | "Filtro de la tabla" | `labels.region` |
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
<KapiTable columns={columns} rows={alumnos} filterable labels={{ region: "Filtro de alumnos" }} />
|
|
86
|
+
<KapiTable columns={columns} rows={cursos} filterable labels={{ region: "Filtro de cursos" }} />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Para texto que sólo tienen que leer los lectores de pantalla (la cabecera de una columna de acción,
|
|
90
|
+
por ejemplo) está la clase `.kapi-sr-only`:
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
{ key: "abrir", label: <span className="kapi-sr-only">Abrir</span>, width: 90, align: "right", render: … }
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Paradas de tabulación de las regiones con scroll
|
|
97
|
+
|
|
98
|
+
`main.kapi-content` (el contenedor que scrollea de `KapiShell`) y `.kapi-tablewrap` llevan
|
|
99
|
+
`tabIndex={0}`. Es deliberado: una región que scrollea y no tiene nada enfocable adentro deja a un
|
|
100
|
+
teclado sin forma de recorrerla. El costo es **una parada de tabulación por página** en el `main`,
|
|
101
|
+
que además sirve de destino de salto.
|
|
102
|
+
|
|
103
|
+
El contraste de los tokens de texto se verifica en `visual/a11y.spec.ts` (axe en Chromium real); los
|
|
104
|
+
tests DOM no pueden hacerlo porque jsdom no resuelve colores computados.
|
|
105
|
+
|
|
69
106
|
## Referencia de props
|
|
70
107
|
|
|
71
108
|
El playground trae una vista **Referencia → Referencia de props** (`#/referencia/props/KapiButton`): elige un
|
|
@@ -88,9 +88,15 @@ export type KapiTableLabels = {
|
|
|
88
88
|
prevPage: string;
|
|
89
89
|
nextPage: string;
|
|
90
90
|
expandRow: string;
|
|
91
|
+
/** Cabecera de la columna de expandir: no se ve, la leen los lectores de pantalla. */
|
|
92
|
+
expandColumn: string;
|
|
91
93
|
columns: string;
|
|
92
94
|
resizeColumn: string;
|
|
93
95
|
filter: string;
|
|
96
|
+
/** Nombre accesible de la región `role="search"` del filtro. Dos tablas filtrables en la misma
|
|
97
|
+
* página necesitan nombres distintos para que sus regiones se distingan. Se reenvía tal cual a
|
|
98
|
+
* `KapiTableFilter`, que define el default. */
|
|
99
|
+
region: string;
|
|
94
100
|
filterPlaceholder: string;
|
|
95
101
|
filterColumn: string;
|
|
96
102
|
filterAll: string;
|