@eduardoalvarez/arrecife 0.4.0 → 0.5.1
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/CHANGELOG.md +27 -0
- package/README.md +34 -1
- package/dist/brand/index.cjs +29 -10
- package/dist/brand/index.d.cts +9 -1
- package/dist/brand/index.d.ts +9 -1
- package/dist/brand/index.js +1 -1
- package/dist/{chunk-TB3IYPOD.js → chunk-YZ2SDOVZ.js} +27 -11
- package/dist/index.cjs +345 -37
- package/dist/index.d.cts +135 -18
- package/dist/index.d.ts +135 -18
- package/dist/index.js +320 -25
- package/dist/tokens/theme.css +27 -0
- package/llms.txt +59 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.1](https://github.com/Proskynete/arrecife/compare/v0.5.0...v0.5.1) (2026-08-31)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### 🐛 Correcciones
|
|
7
|
+
|
|
8
|
+
* **components:** la firma del pie va con la primera fila, no la última ([1a854ab](https://github.com/Proskynete/arrecife/commit/1a854ab7d71e66ab4998802ae3dc498f96e47b57))
|
|
9
|
+
|
|
10
|
+
## [0.5.0](https://github.com/Proskynete/arrecife/compare/v0.4.0...v0.5.0) (2026-08-31)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### ⚠ BREAKING CHANGES
|
|
14
|
+
|
|
15
|
+
* **primitives:** `Toast`, `ToastProvider`, `ToastViewport`, `ToastTitle` y `ToastDescription` dejan de exportarse; se usa `<Toaster />` una vez y `toast()` desde donde haga falta. `ToastAction` no cambia. Migración en docs/migracion-0.5.md.
|
|
16
|
+
|
|
17
|
+
### 🚀 Novedades
|
|
18
|
+
|
|
19
|
+
* **components:** EventCalendar, la agenda con crear, editar y borrar ([6190700](https://github.com/Proskynete/arrecife/commit/61907003eeef777ba86c594791b2e95d225eda1f))
|
|
20
|
+
* **components:** la barra, el pie y las métricas como en el documento ([203b669](https://github.com/Proskynete/arrecife/commit/203b669379f63048ce4b34fce9a9411aebec3279))
|
|
21
|
+
* **primitives:** AvatarUpload, el avatar que se puede cambiar ([f888b4c](https://github.com/Proskynete/arrecife/commit/f888b4c0fadeddfb885f0b4651bf56000da7d430))
|
|
22
|
+
* **primitives:** el plegable anima la altura, como cuarta excepción ([b9dd44c](https://github.com/Proskynete/arrecife/commit/b9dd44ccb99ccb2c0f00ec99fefa17bc838cca52))
|
|
23
|
+
* **primitives:** Toaster es la única forma de mostrar un aviso ([2ec1d23](https://github.com/Proskynete/arrecife/commit/2ec1d2383ecd87c58a88c9e32543dc2112df2321))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### 📚 Documentación
|
|
27
|
+
|
|
28
|
+
* los iconos de redes van agrupados, y por qué ([1939455](https://github.com/Proskynete/arrecife/commit/19394554185a54e4e752a86e27e60f1a60acec26))
|
|
29
|
+
|
|
3
30
|
## [0.4.0](https://github.com/Proskynete/arrecife/compare/v0.3.0...v0.4.0) (2026-08-31)
|
|
4
31
|
|
|
5
32
|
|
package/README.md
CHANGED
|
@@ -83,6 +83,11 @@ con la hoja en `src/styles/` sube dos niveles y no uno. Lo detectaron los tests
|
|
|
83
83
|
E2E del blog, no el build, y hasta la 0.3.0 esto solo estaba escrito en
|
|
84
84
|
`llms.txt` — el archivo que lee un agente y no una persona.
|
|
85
85
|
|
|
86
|
+
> **Vienes de la 0.4.0 o anterior.** `Toast`, `ToastProvider`, `ToastViewport`,
|
|
87
|
+
> `ToastTitle` y `ToastDescription` dejaron de ser API pública en la 0.5.0: se
|
|
88
|
+
> usa `Toaster` y `toast()`. `ToastAction` se queda. La migración, con el porqué
|
|
89
|
+
> y los ejemplos, está en [`docs/migracion-0.5.md`](docs/migracion-0.5.md).
|
|
90
|
+
|
|
86
91
|
> **Vienes de la 0.2.0 o anterior.** Los cinco escalones de espaciado se
|
|
87
92
|
> renombraron: `p-md` es ahora `p-step-md`, `gap-sm` es `gap-step-sm`. Es un
|
|
88
93
|
> cambio incompatible, y si tu proyecto usa `max-w-sm`, `max-w-md` o `max-w-lg`,
|
|
@@ -253,6 +258,34 @@ Comprobado empaquetando la librería con `pnpm pack` e instalándola en un proye
|
|
|
253
258
|
aparte: los tipos resuelven desde `dist/`, `./tokens` carga sin arrastrar React y
|
|
254
259
|
`./tokens/theme.css` se resuelve por subruta.
|
|
255
260
|
|
|
261
|
+
### Los iconos de redes van agrupados
|
|
262
|
+
|
|
263
|
+
Es lo primero con lo que tropieza quien consume la librería, porque la forma
|
|
264
|
+
natural no funciona:
|
|
265
|
+
|
|
266
|
+
```tsx
|
|
267
|
+
// ❌ no existe
|
|
268
|
+
import { GitHub, LinkedIn } from '@eduardoalvarez/arrecife';
|
|
269
|
+
|
|
270
|
+
// ✅
|
|
271
|
+
import { social } from '@eduardoalvarez/arrecife';
|
|
272
|
+
|
|
273
|
+
<social.GitHub />
|
|
274
|
+
<social.LinkedIn />
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Los ocho son `GitHub`, `LinkedIn`, `X`, `Instagram`, `Discord`, `YouTube`, `Rss`
|
|
278
|
+
y `Correo`. Van bajo un namespace por un motivo concreto: **uno se llama `X`**.
|
|
279
|
+
Un `export const X` en la raíz de una librería de componentes colisiona con
|
|
280
|
+
cualquier cosa —una variable de un genérico, un `import { X }` de otro sitio— y
|
|
281
|
+
el fallo aparece lejos de aquí.
|
|
282
|
+
|
|
283
|
+
**Los glifos internos NO se exportan.** `Close`, `ChevronDown`, `Copy`, `Sol` y
|
|
284
|
+
compañía son el juego mínimo que necesitan los primitivos y se quedan dentro.
|
|
285
|
+
Publicarlos convertiría `lib/glyphs.tsx` en la librería de iconos que el sistema
|
|
286
|
+
decidió no tener, y a partir de ahí crece sola. Un proyecto que necesite un icono
|
|
287
|
+
pasa el suyo: `Stat` recibe `icon`, `Footer` recibe el `icon` de cada red.
|
|
288
|
+
|
|
256
289
|
### Las dos subrutas que piden una dependencia
|
|
257
290
|
|
|
258
291
|
`./form` y `./chart` no cuelgan de la raíz, y es a propósito. Cada una pide una
|
|
@@ -286,7 +319,7 @@ grep sobre esas dos líneas no encuentra React ni aunque el chunk lo importe.
|
|
|
286
319
|
| `pnpm typecheck` | `tsc --noEmit` |
|
|
287
320
|
| `pnpm lint` | ESLint, incluido el veto a hex literales fuera de `tokens.ts` |
|
|
288
321
|
| `pnpm check:tokens` | falla si `src/tokens/` importa algo de fuera |
|
|
289
|
-
| `pnpm test` | compila Tailwind y corre axe sobre las
|
|
322
|
+
| `pnpm test` | compila Tailwind y corre axe sobre las 206 stories, en los dos modos |
|
|
290
323
|
| `pnpm check:exports` | verifica que `dist/` tiene lo que `exports` promete |
|
|
291
324
|
| `pnpm check:release` | valida `release-please-config.json` contra el esquema oficial |
|
|
292
325
|
| `pnpm storybook` | genera los tokens y levanta Storybook en el 6006 |
|
package/dist/brand/index.cjs
CHANGED
|
@@ -116,6 +116,9 @@ var spacing = {
|
|
|
116
116
|
stepXl: 40,
|
|
117
117
|
section: 96
|
|
118
118
|
};
|
|
119
|
+
var tagline = {
|
|
120
|
+
/** Header, una línea. */
|
|
121
|
+
corto: "Ayudo a equipos a escalar con criterio"};
|
|
119
122
|
var naming = {
|
|
120
123
|
wordmark: "Eduardo \xC1lvarez"};
|
|
121
124
|
|
|
@@ -165,20 +168,36 @@ function Logo({
|
|
|
165
168
|
sobre = "oscuro",
|
|
166
169
|
basePath = RUTA_ASSETS,
|
|
167
170
|
soloIsotipo = false,
|
|
171
|
+
conLema = false,
|
|
168
172
|
className,
|
|
169
173
|
...props
|
|
170
174
|
}) {
|
|
175
|
+
const conAleta = /* @__PURE__ */ jsxRuntime.jsx(
|
|
176
|
+
Isotipo,
|
|
177
|
+
{
|
|
178
|
+
sobre,
|
|
179
|
+
basePath,
|
|
180
|
+
alt: soloIsotipo ? naming.wordmark : "",
|
|
181
|
+
className: conLema ? "h-9 w-auto" : "h-7 w-auto"
|
|
182
|
+
}
|
|
183
|
+
);
|
|
184
|
+
const wordmark = /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark });
|
|
185
|
+
if (soloIsotipo) {
|
|
186
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: conAleta });
|
|
187
|
+
}
|
|
188
|
+
if (conLema) {
|
|
189
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-sm inline-flex items-center", className), ...props, children: [
|
|
190
|
+
conAleta,
|
|
191
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "bg-hairline h-8 w-px shrink-0" }),
|
|
192
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
193
|
+
wordmark,
|
|
194
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: tagline.corto })
|
|
195
|
+
] })
|
|
196
|
+
] });
|
|
197
|
+
}
|
|
171
198
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: [
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
{
|
|
175
|
-
sobre,
|
|
176
|
-
basePath,
|
|
177
|
-
alt: soloIsotipo ? naming.wordmark : "",
|
|
178
|
-
className: "h-7 w-auto"
|
|
179
|
-
}
|
|
180
|
-
),
|
|
181
|
-
soloIsotipo ? null : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark })
|
|
199
|
+
conAleta,
|
|
200
|
+
wordmark
|
|
182
201
|
] });
|
|
183
202
|
}
|
|
184
203
|
function Mascota({
|
package/dist/brand/index.d.cts
CHANGED
|
@@ -22,6 +22,14 @@ type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
|
22
22
|
basePath?: string | undefined;
|
|
23
23
|
/** Oculta el wordmark y deja solo la aleta, para barras muy estrechas. */
|
|
24
24
|
soloIsotipo?: boolean | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Añade el lema bajo el wordmark, separado de la aleta por una divisoria.
|
|
27
|
+
*
|
|
28
|
+
* Es la forma que toma la marca en la barra del sitio. El texto sale de
|
|
29
|
+
* `tagline.corto` y no se puede pasar por prop, por lo mismo que el wordmark:
|
|
30
|
+
* un lema escrito a mano en cinco proyectos son cinco lemas en seis meses.
|
|
31
|
+
*/
|
|
32
|
+
conLema?: boolean | undefined;
|
|
25
33
|
};
|
|
26
34
|
/**
|
|
27
35
|
* El wordmark sale de `naming.wordmark`, no de una cadena escrita a mano, y
|
|
@@ -31,7 +39,7 @@ type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
|
31
39
|
* Cuando se oculta el wordmark, el nombre sigue llegando al lector de pantalla
|
|
32
40
|
* por el `alt` del isotipo. Un logo sin nombre accesible es un logo invisible.
|
|
33
41
|
*/
|
|
34
|
-
declare function Logo({ sobre, basePath, soloIsotipo, className, ...props }: LogoProps): react.JSX.Element;
|
|
42
|
+
declare function Logo({ sobre, basePath, soloIsotipo, conLema, className, ...props }: LogoProps): react.JSX.Element;
|
|
35
43
|
|
|
36
44
|
type Base = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
37
45
|
basePath?: string | undefined;
|
package/dist/brand/index.d.ts
CHANGED
|
@@ -22,6 +22,14 @@ type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
|
22
22
|
basePath?: string | undefined;
|
|
23
23
|
/** Oculta el wordmark y deja solo la aleta, para barras muy estrechas. */
|
|
24
24
|
soloIsotipo?: boolean | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Añade el lema bajo el wordmark, separado de la aleta por una divisoria.
|
|
27
|
+
*
|
|
28
|
+
* Es la forma que toma la marca en la barra del sitio. El texto sale de
|
|
29
|
+
* `tagline.corto` y no se puede pasar por prop, por lo mismo que el wordmark:
|
|
30
|
+
* un lema escrito a mano en cinco proyectos son cinco lemas en seis meses.
|
|
31
|
+
*/
|
|
32
|
+
conLema?: boolean | undefined;
|
|
25
33
|
};
|
|
26
34
|
/**
|
|
27
35
|
* El wordmark sale de `naming.wordmark`, no de una cadena escrita a mano, y
|
|
@@ -31,7 +39,7 @@ type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
|
31
39
|
* Cuando se oculta el wordmark, el nombre sigue llegando al lector de pantalla
|
|
32
40
|
* por el `alt` del isotipo. Un logo sin nombre accesible es un logo invisible.
|
|
33
41
|
*/
|
|
34
|
-
declare function Logo({ sobre, basePath, soloIsotipo, className, ...props }: LogoProps): react.JSX.Element;
|
|
42
|
+
declare function Logo({ sobre, basePath, soloIsotipo, conLema, className, ...props }: LogoProps): react.JSX.Element;
|
|
35
43
|
|
|
36
44
|
type Base = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
37
45
|
basePath?: string | undefined;
|
package/dist/brand/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CaraDeMascota, Isotipo, Logo, Mascota } from '../chunk-
|
|
1
|
+
export { CaraDeMascota, Isotipo, Logo, Mascota } from '../chunk-YZ2SDOVZ.js';
|
|
2
2
|
export { RUTA_ASSETS, aletas, caras, listaCaras, listaPoses, poses, usoDeCara } from '../chunk-E3OMP2DL.js';
|
|
3
3
|
import '../chunk-NHS7ETKJ.js';
|
|
4
4
|
import '../chunk-TSPJOM6K.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { aletas, RUTA_ASSETS, poses, caras } from './chunk-E3OMP2DL.js';
|
|
2
2
|
import { cn } from './chunk-NHS7ETKJ.js';
|
|
3
|
-
import { naming } from './chunk-TSPJOM6K.js';
|
|
3
|
+
import { naming, tagline } from './chunk-TSPJOM6K.js';
|
|
4
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
function Isotipo({
|
|
@@ -27,20 +27,36 @@ function Logo({
|
|
|
27
27
|
sobre = "oscuro",
|
|
28
28
|
basePath = RUTA_ASSETS,
|
|
29
29
|
soloIsotipo = false,
|
|
30
|
+
conLema = false,
|
|
30
31
|
className,
|
|
31
32
|
...props
|
|
32
33
|
}) {
|
|
34
|
+
const conAleta = /* @__PURE__ */ jsx(
|
|
35
|
+
Isotipo,
|
|
36
|
+
{
|
|
37
|
+
sobre,
|
|
38
|
+
basePath,
|
|
39
|
+
alt: soloIsotipo ? naming.wordmark : "",
|
|
40
|
+
className: conLema ? "h-9 w-auto" : "h-7 w-auto"
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
const wordmark = /* @__PURE__ */ jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark });
|
|
44
|
+
if (soloIsotipo) {
|
|
45
|
+
return /* @__PURE__ */ jsx("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: conAleta });
|
|
46
|
+
}
|
|
47
|
+
if (conLema) {
|
|
48
|
+
return /* @__PURE__ */ jsxs("span", { className: cn("gap-step-sm inline-flex items-center", className), ...props, children: [
|
|
49
|
+
conAleta,
|
|
50
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "bg-hairline h-8 w-px shrink-0" }),
|
|
51
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
52
|
+
wordmark,
|
|
53
|
+
/* @__PURE__ */ jsx("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: tagline.corto })
|
|
54
|
+
] })
|
|
55
|
+
] });
|
|
56
|
+
}
|
|
33
57
|
return /* @__PURE__ */ jsxs("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: [
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{
|
|
37
|
-
sobre,
|
|
38
|
-
basePath,
|
|
39
|
-
alt: soloIsotipo ? naming.wordmark : "",
|
|
40
|
-
className: "h-7 w-auto"
|
|
41
|
-
}
|
|
42
|
-
),
|
|
43
|
-
soloIsotipo ? null : /* @__PURE__ */ jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark })
|
|
58
|
+
conAleta,
|
|
59
|
+
wordmark
|
|
44
60
|
] });
|
|
45
61
|
}
|
|
46
62
|
function Mascota({
|