@eduardoalvarez/arrecife 0.5.1 → 0.7.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/CHANGELOG.md +114 -0
- package/README.md +868 -467
- package/dist/brand/index.cjs +112 -95
- package/dist/brand/index.d.cts +40 -39
- package/dist/brand/index.d.ts +40 -39
- package/dist/brand/index.js +5 -4
- package/dist/catalog-D13txprv.d.cts +78 -0
- package/dist/catalog-D13txprv.d.ts +78 -0
- package/dist/chart/index.cjs +100 -83
- package/dist/chart/index.d.cts +66 -66
- package/dist/chart/index.d.ts +66 -66
- package/dist/chart/index.js +14 -12
- package/dist/chunk-2WPWEIMD.js +27 -0
- package/dist/chunk-45HVCTB7.js +70 -0
- package/dist/{chunk-ZEOQKRQ7.js → chunk-727HCBD4.js} +1 -1
- package/dist/chunk-CKRSQPTX.js +36 -0
- package/dist/chunk-E6KFUSKB.js +144 -0
- package/dist/chunk-GCRII2KQ.js +86 -0
- package/dist/{chunk-YZ2SDOVZ.js → chunk-JN3IS5OS.js} +30 -30
- package/dist/chunk-ODBFN44D.js +45 -0
- package/dist/chunk-OMKSESQB.js +300 -0
- package/dist/{chunk-VPT32GPG.js → chunk-TA7TLWW4.js} +2 -2
- package/dist/chunk-WGNIRIN7.js +42 -0
- package/dist/doctor.mjs +166 -0
- package/dist/form/index.cjs +109 -92
- package/dist/form/index.d.cts +43 -42
- package/dist/form/index.d.ts +43 -42
- package/dist/form/index.js +25 -23
- package/dist/icons/index.cjs +149 -0
- package/dist/icons/index.d.cts +94 -0
- package/dist/icons/index.d.ts +94 -0
- package/dist/icons/index.js +28 -0
- package/dist/index-DlAO2JZs.d.cts +47 -0
- package/dist/index-DlAO2JZs.d.ts +47 -0
- package/dist/index.cjs +1292 -983
- package/dist/index.d.cts +927 -806
- package/dist/index.d.ts +927 -806
- package/dist/index.js +809 -778
- package/dist/{label-DuTvJGxD.d.ts → label-MgHFKnFy.d.cts} +3 -3
- package/dist/{label-DuTvJGxD.d.cts → label-MgHFKnFy.d.ts} +3 -3
- package/dist/og/index.cjs +133 -132
- package/dist/og/index.d.cts +93 -89
- package/dist/og/index.d.ts +93 -89
- package/dist/og/index.js +106 -106
- package/dist/shiki/index.cjs +28 -30
- package/dist/shiki/index.d.cts +4 -4
- package/dist/shiki/index.d.ts +4 -4
- package/dist/shiki/index.js +12 -12
- package/dist/social/index.cjs +67 -0
- package/dist/social/index.d.cts +2 -0
- package/dist/social/index.d.ts +2 -0
- package/dist/social/index.js +2 -0
- package/dist/theme/index.cjs +97 -0
- package/dist/theme/index.d.cts +144 -0
- package/dist/theme/index.d.ts +144 -0
- package/dist/theme/index.js +2 -0
- package/dist/tokens/index.cjs +159 -88
- package/dist/tokens/index.d.cts +277 -165
- package/dist/tokens/index.d.ts +277 -165
- package/dist/tokens/index.js +2 -2
- package/dist/tokens/theme.css +165 -100
- package/dist/variants/index.cjs +195 -0
- package/dist/variants/index.d.cts +195 -0
- package/dist/variants/index.d.ts +195 -0
- package/dist/variants/index.js +3 -0
- package/llms.txt +1145 -746
- package/package.json +42 -11
- package/dist/catalogo-Du5ID-Hi.d.cts +0 -77
- package/dist/catalogo-Du5ID-Hi.d.ts +0 -77
- package/dist/chunk-E3OMP2DL.js +0 -36
- package/dist/chunk-KPZNNMV5.js +0 -83
- package/dist/chunk-NHS7ETKJ.js +0 -27
- package/dist/chunk-TSPJOM6K.js +0 -229
- package/dist/chunk-UOWIDFCB.js +0 -81
- package/dist/tema/index.cjs +0 -94
- package/dist/tema/index.d.cts +0 -110
- package/dist/tema/index.d.ts +0 -110
- package/dist/tema/index.js +0 -2
package/dist/brand/index.cjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
var clsx = require('clsx');
|
|
4
5
|
var tailwindMerge = require('tailwind-merge');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
|
|
7
|
-
// src/brand/
|
|
8
|
-
var
|
|
8
|
+
// src/brand/catalog.ts
|
|
9
|
+
var faces = {
|
|
9
10
|
annoyed: "face-annoyed.png",
|
|
10
11
|
confused: "face-confused.png",
|
|
11
12
|
hearts: "face-hearts.png",
|
|
@@ -20,76 +21,76 @@ var poses = {
|
|
|
20
21
|
peek: "pose-peek.png",
|
|
21
22
|
surf: "pose-surf.png"
|
|
22
23
|
};
|
|
23
|
-
var
|
|
24
|
-
/**
|
|
24
|
+
var fins = {
|
|
25
|
+
/** Two blues. For light backgrounds. */
|
|
25
26
|
color: "fin.png",
|
|
26
|
-
/**
|
|
27
|
-
|
|
27
|
+
/** Single-ink silhouette. For dark backgrounds. */
|
|
28
|
+
foam: "fin-foam.png"
|
|
28
29
|
};
|
|
29
|
-
var
|
|
30
|
-
wink: "
|
|
31
|
-
waiting: "
|
|
32
|
-
laughing: "
|
|
33
|
-
shades: "
|
|
34
|
-
hearts: "
|
|
35
|
-
confused: "404,
|
|
36
|
-
annoyed: "
|
|
30
|
+
var faceUsage = {
|
|
31
|
+
wink: "Forms, a friendly footnote",
|
|
32
|
+
waiting: "No results, waiting state",
|
|
33
|
+
laughing: "Success, subscription confirmed",
|
|
34
|
+
shades: "Module or course completed",
|
|
35
|
+
hearts: "Gratitude, article OG",
|
|
36
|
+
confused: "404, page not found",
|
|
37
|
+
annoyed: "Server error, build failure"
|
|
37
38
|
};
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
39
|
+
var ASSETS_PATH = "/brand";
|
|
40
|
+
var faceList = Object.keys(faces);
|
|
41
|
+
var poseList = Object.keys(poses);
|
|
41
42
|
var typeScale = {
|
|
42
43
|
display: { family: "display", size: 76, lineHeight: 0.96, weight: 800, tracking: "-0.035em" },
|
|
43
|
-
/**
|
|
44
|
+
/** Large metrics. Numbers, not prose: line height 1 and no descenders. */
|
|
44
45
|
stat: { family: "display", size: 46, lineHeight: 1, weight: 800, tracking: "-0.035em" },
|
|
45
46
|
h1: { family: "display", size: 44, lineHeight: 1.05, weight: 700, tracking: "-0.03em" },
|
|
46
47
|
h2: { family: "display", size: 30, lineHeight: 1.1, weight: 600, tracking: "-0.02em" },
|
|
47
48
|
h3: { family: "display", size: 25, lineHeight: 1.15, weight: 600, tracking: "-0.02em" },
|
|
48
49
|
body: { family: "sans", size: 18, lineHeight: 1.75, weight: 400 },
|
|
49
50
|
/**
|
|
50
|
-
* 17px.
|
|
51
|
+
* 17px. The large button, and the deck on interior pages.
|
|
51
52
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* It earns its own step because the identity document uses it TWICE, in two
|
|
54
|
+
* different pieces: «lg 15/30 r12» with 17px text, and «h1 44/700 · deck 17px
|
|
55
|
+
* · context paragraph 15px». One use would not have justified splitting the
|
|
56
|
+
* gap between `ui` (15) and `body` (18); two did.
|
|
56
57
|
*/
|
|
57
58
|
lead: { family: "sans", size: 17, lineHeight: 1.5, weight: 400 },
|
|
58
59
|
ui: { family: "sans", size: 15, lineHeight: 1.6, weight: 400 },
|
|
59
60
|
label: { family: "sans", size: 13, lineHeight: 1.5, weight: 500 },
|
|
60
61
|
/**
|
|
61
|
-
*
|
|
62
|
+
* The status-badge scale: sans 12.5/500, squared off.
|
|
62
63
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
64
|
+
* That is half a pixel below `label`, and this time the half pixel matters: a
|
|
65
|
+
* status badge sits inside a table or next to a title, and at 13 it competed
|
|
66
|
+
* with the text it accompanies. The document specifies 12.5 and it shows.
|
|
66
67
|
*/
|
|
67
68
|
tag: { family: "sans", size: 12.5, lineHeight: 1.4, weight: 500 },
|
|
68
69
|
/**
|
|
69
|
-
*
|
|
70
|
+
* The category and metric scale: mono 11.5.
|
|
70
71
|
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* 5.57:1
|
|
72
|
+
* It breaks the floor set by `limits.minScreenPx`, deliberately. That floor
|
|
73
|
+
* protects TEXT — what you read in a sentence — and a one-word pill is not
|
|
74
|
+
* running text: it is a mark. Contrast is still measured and still passes AA
|
|
75
|
+
* (plankton 5.57:1 over abyss), which is the part that is not negotiable.
|
|
75
76
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
77
|
+
* At 13 the three badge families grew past the size of a small button and
|
|
78
|
+
* outweighed the title they accompany. See `docs/decisions.md`.
|
|
78
79
|
*/
|
|
79
80
|
chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
|
|
80
81
|
/**
|
|
81
|
-
* Mono
|
|
82
|
-
*
|
|
82
|
+
* Mono with NO transform: dates, paths, versions, file names, the footer
|
|
83
|
+
* signature and metric labels. It is most of the mono in the system.
|
|
83
84
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
85
|
+
* It exists because `eyebrow` ships `uppercase` and that is not a preference
|
|
86
|
+
* you can switch off: it IS the eyebrow scale. An `18 Aug 2026` in small caps
|
|
87
|
+
* or a `pose-laptop-coffee.png` in all caps are wrong, and without this step
|
|
88
|
+
* the only way out was a `normal-case` at every call site.
|
|
88
89
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* 12.5
|
|
90
|
+
* The document says 12.5. This is 13 for the same reason `textMuted` was
|
|
91
|
+
* corrected: `limits.minScreenPx` is 13 and plankton is «never under 13px».
|
|
92
|
+
* This scale is exactly where muted metadata gets written, so putting it at
|
|
93
|
+
* 12.5 would have made its most common use illegible by half a pixel.
|
|
93
94
|
*/
|
|
94
95
|
meta: { family: "mono", size: 13, lineHeight: 1.6, weight: 400 },
|
|
95
96
|
eyebrow: { family: "mono", size: 12, tracking: "0.12em", transform: "uppercase" }
|
|
@@ -105,8 +106,24 @@ var control = {
|
|
|
105
106
|
sm: 14,
|
|
106
107
|
md: 22,
|
|
107
108
|
lg: 30,
|
|
108
|
-
/**
|
|
109
|
-
icon: 42
|
|
109
|
+
/** Icon button: square, no text. */
|
|
110
|
+
icon: 42,
|
|
111
|
+
/**
|
|
112
|
+
* The dense icon button, 32×32.
|
|
113
|
+
*
|
|
114
|
+
* 42 is the right measure for a control you hit with a thumb, and the four
|
|
115
|
+
* reading sites are where that fits. `cursos` is the odd one out: it is the
|
|
116
|
+
* only admin app of the set, with three actions per table row, and at 42 the
|
|
117
|
+
* row grows with them — the original used 24 and 28.
|
|
118
|
+
*
|
|
119
|
+
* It is 32 and not 28 because 32 is `sm`'s height. A dense icon button lines
|
|
120
|
+
* up with a small text button, so a toolbar mixing the two stays on one
|
|
121
|
+
* baseline; 28 would have been a fifth height that matches nothing.
|
|
122
|
+
*
|
|
123
|
+
* It does not replace `icon`. A page's primary action stays at 42; this is for
|
|
124
|
+
* a row of a table. See `docs/decisions.md` § 22.
|
|
125
|
+
*/
|
|
126
|
+
iconSm: 32
|
|
110
127
|
};
|
|
111
128
|
var spacing = {
|
|
112
129
|
stepXs: 8,
|
|
@@ -117,45 +134,45 @@ var spacing = {
|
|
|
117
134
|
section: 96
|
|
118
135
|
};
|
|
119
136
|
var tagline = {
|
|
120
|
-
/** Header,
|
|
121
|
-
|
|
137
|
+
/** Header, one line. */
|
|
138
|
+
short: "Ayudo a equipos a escalar con criterio"};
|
|
122
139
|
var naming = {
|
|
123
140
|
wordmark: "Eduardo \xC1lvarez"};
|
|
124
141
|
|
|
125
142
|
// src/lib/cn.ts
|
|
126
|
-
var kebab = (
|
|
127
|
-
var
|
|
128
|
-
var
|
|
129
|
-
var
|
|
130
|
-
var
|
|
143
|
+
var kebab = (name) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
144
|
+
var scales = Object.keys(typeScale);
|
|
145
|
+
var radii = Object.keys(radius);
|
|
146
|
+
var namespaces = Object.keys(spacing).map(kebab);
|
|
147
|
+
var controls = Object.keys(control).map((name) => `control-${kebab(name)}`);
|
|
131
148
|
var twMerge = tailwindMerge.extendTailwindMerge({
|
|
132
149
|
extend: {
|
|
133
150
|
classGroups: {
|
|
134
|
-
"font-size": [{ text:
|
|
135
|
-
rounded: [{ rounded:
|
|
136
|
-
p: [{ p:
|
|
137
|
-
px: [{ px: [...
|
|
138
|
-
py: [{ py:
|
|
139
|
-
gap: [{ gap:
|
|
140
|
-
size: [{ size:
|
|
151
|
+
"font-size": [{ text: scales }],
|
|
152
|
+
rounded: [{ rounded: radii }],
|
|
153
|
+
p: [{ p: namespaces }],
|
|
154
|
+
px: [{ px: [...namespaces, ...controls] }],
|
|
155
|
+
py: [{ py: namespaces }],
|
|
156
|
+
gap: [{ gap: namespaces }],
|
|
157
|
+
size: [{ size: controls }]
|
|
141
158
|
}
|
|
142
159
|
}
|
|
143
160
|
});
|
|
144
161
|
function cn(...inputs) {
|
|
145
162
|
return twMerge(clsx.clsx(inputs));
|
|
146
163
|
}
|
|
147
|
-
function
|
|
148
|
-
|
|
149
|
-
basePath =
|
|
164
|
+
function Isotype({
|
|
165
|
+
background = "dark",
|
|
166
|
+
basePath = ASSETS_PATH,
|
|
150
167
|
alt = "",
|
|
151
168
|
className,
|
|
152
169
|
...props
|
|
153
170
|
}) {
|
|
154
|
-
const
|
|
171
|
+
const file = background === "dark" ? fins.foam : fins.color;
|
|
155
172
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
156
173
|
"img",
|
|
157
174
|
{
|
|
158
|
-
src: `${basePath}/${
|
|
175
|
+
src: `${basePath}/${file}`,
|
|
159
176
|
alt,
|
|
160
177
|
width: 147,
|
|
161
178
|
height: 111,
|
|
@@ -165,44 +182,44 @@ function Isotipo({
|
|
|
165
182
|
);
|
|
166
183
|
}
|
|
167
184
|
function Logo({
|
|
168
|
-
|
|
169
|
-
basePath =
|
|
170
|
-
|
|
171
|
-
|
|
185
|
+
background = "dark",
|
|
186
|
+
basePath = ASSETS_PATH,
|
|
187
|
+
isotypeOnly = false,
|
|
188
|
+
withTagline = false,
|
|
172
189
|
className,
|
|
173
190
|
...props
|
|
174
191
|
}) {
|
|
175
|
-
const
|
|
176
|
-
|
|
192
|
+
const withFin = /* @__PURE__ */ jsxRuntime.jsx(
|
|
193
|
+
Isotype,
|
|
177
194
|
{
|
|
178
|
-
|
|
195
|
+
background,
|
|
179
196
|
basePath,
|
|
180
|
-
alt:
|
|
181
|
-
className:
|
|
197
|
+
alt: isotypeOnly ? naming.wordmark : "",
|
|
198
|
+
className: withTagline ? "h-9 w-auto" : "h-7 w-auto"
|
|
182
199
|
}
|
|
183
200
|
);
|
|
184
201
|
const wordmark = /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark });
|
|
185
|
-
if (
|
|
186
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children:
|
|
202
|
+
if (isotypeOnly) {
|
|
203
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: withFin });
|
|
187
204
|
}
|
|
188
|
-
if (
|
|
205
|
+
if (withTagline) {
|
|
189
206
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-sm inline-flex items-center", className), ...props, children: [
|
|
190
|
-
|
|
207
|
+
withFin,
|
|
191
208
|
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "bg-hairline h-8 w-px shrink-0" }),
|
|
192
209
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
193
210
|
wordmark,
|
|
194
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: tagline.
|
|
211
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: tagline.short })
|
|
195
212
|
] })
|
|
196
213
|
] });
|
|
197
214
|
}
|
|
198
215
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: [
|
|
199
|
-
|
|
216
|
+
withFin,
|
|
200
217
|
wordmark
|
|
201
218
|
] });
|
|
202
219
|
}
|
|
203
|
-
function
|
|
220
|
+
function Mascot({
|
|
204
221
|
pose,
|
|
205
|
-
basePath =
|
|
222
|
+
basePath = ASSETS_PATH,
|
|
206
223
|
alt = "",
|
|
207
224
|
className,
|
|
208
225
|
...props
|
|
@@ -217,9 +234,9 @@ function Mascota({
|
|
|
217
234
|
}
|
|
218
235
|
);
|
|
219
236
|
}
|
|
220
|
-
function
|
|
221
|
-
|
|
222
|
-
basePath =
|
|
237
|
+
function MascotFace({
|
|
238
|
+
expression,
|
|
239
|
+
basePath = ASSETS_PATH,
|
|
223
240
|
alt = "",
|
|
224
241
|
className,
|
|
225
242
|
...props
|
|
@@ -227,7 +244,7 @@ function CaraDeMascota({
|
|
|
227
244
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
228
245
|
"img",
|
|
229
246
|
{
|
|
230
|
-
src: `${basePath}/${
|
|
247
|
+
src: `${basePath}/${faces[expression]}`,
|
|
231
248
|
alt,
|
|
232
249
|
className: cn("h-auto w-full max-w-24 select-none", className),
|
|
233
250
|
...props
|
|
@@ -235,14 +252,14 @@ function CaraDeMascota({
|
|
|
235
252
|
);
|
|
236
253
|
}
|
|
237
254
|
|
|
238
|
-
exports.
|
|
239
|
-
exports.
|
|
255
|
+
exports.ASSETS_PATH = ASSETS_PATH;
|
|
256
|
+
exports.Isotype = Isotype;
|
|
240
257
|
exports.Logo = Logo;
|
|
241
|
-
exports.
|
|
242
|
-
exports.
|
|
243
|
-
exports.
|
|
244
|
-
exports.
|
|
245
|
-
exports.
|
|
246
|
-
exports.
|
|
258
|
+
exports.Mascot = Mascot;
|
|
259
|
+
exports.MascotFace = MascotFace;
|
|
260
|
+
exports.faceList = faceList;
|
|
261
|
+
exports.faceUsage = faceUsage;
|
|
262
|
+
exports.faces = faces;
|
|
263
|
+
exports.fins = fins;
|
|
264
|
+
exports.poseList = poseList;
|
|
247
265
|
exports.poses = poses;
|
|
248
|
-
exports.usoDeCara = usoDeCara;
|
package/dist/brand/index.d.cts
CHANGED
|
@@ -1,71 +1,72 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as
|
|
1
|
+
import { B as Background, P as Pose, F as Face } from '../catalog-D13txprv.cjs';
|
|
2
|
+
export { A as ASSETS_PATH, a as Fin, f as faceList, b as faceUsage, c as faces, d as fins, p as poseList, e as poses } from '../catalog-D13txprv.cjs';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ComponentPropsWithoutRef } from 'react';
|
|
5
5
|
|
|
6
|
-
type
|
|
6
|
+
type IsotypeProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* recordar.
|
|
8
|
+
* Which background it sits on. Deciding is mandatory even though it has a
|
|
9
|
+
* default: the fin's body is nearly black, so the two-blue variant disappears
|
|
10
|
+
* over abyss. Being a prop, the rule stops being something to remember.
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
background?: Background | undefined;
|
|
14
13
|
basePath?: string | undefined;
|
|
15
|
-
/**
|
|
14
|
+
/** Alt text. Empty when the isotype accompanies text that already names it. */
|
|
16
15
|
alt?: string | undefined;
|
|
17
16
|
};
|
|
18
|
-
declare function
|
|
17
|
+
declare function Isotype({ background, basePath, alt, className, ...props }: IsotypeProps): react.JSX.Element;
|
|
19
18
|
|
|
20
19
|
type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
21
|
-
|
|
20
|
+
background?: Background | undefined;
|
|
22
21
|
basePath?: string | undefined;
|
|
23
|
-
/**
|
|
24
|
-
|
|
22
|
+
/** Hides the wordmark and leaves only the fin, for very narrow bars. */
|
|
23
|
+
isotypeOnly?: boolean | undefined;
|
|
25
24
|
/**
|
|
26
|
-
*
|
|
25
|
+
* Adds the tagline under the wordmark, separated from the fin by a divider.
|
|
27
26
|
*
|
|
28
|
-
*
|
|
29
|
-
* `tagline.
|
|
30
|
-
*
|
|
27
|
+
* It is the shape the brand takes in the site's bar. The text comes from
|
|
28
|
+
* `tagline.short` and cannot be passed as a prop, for the same reason as the
|
|
29
|
+
* wordmark: a tagline hand-written across five projects is five taglines in
|
|
30
|
+
* six months.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
withTagline?: boolean | undefined;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* The wordmark comes from `naming.wordmark`, not from a hand-written string, and
|
|
36
|
+
* it always reads «Eduardo Álvarez». The mascot is called Tiburoncín and its
|
|
37
|
+
* name never appears inside the logo: there is no prop that changes the text.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* When the wordmark is hidden, the name still reaches the screen reader through
|
|
40
|
+
* the isotype's `alt`. A logo with no accessible name is an invisible logo.
|
|
41
41
|
*/
|
|
42
|
-
declare function Logo({
|
|
42
|
+
declare function Logo({ background, basePath, isotypeOnly, withTagline, className, ...props }: LogoProps): react.JSX.Element;
|
|
43
43
|
|
|
44
44
|
type Base = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
45
45
|
basePath?: string | undefined;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* Alt text. Empty by default: the mascot is illustration and the text beside
|
|
48
|
+
* it already says what there is to know. Fill it in only when the image
|
|
49
|
+
* carries information that is not written next to it.
|
|
50
50
|
*/
|
|
51
51
|
alt?: string | undefined;
|
|
52
52
|
};
|
|
53
|
-
type
|
|
53
|
+
type MascotProps = Base & {
|
|
54
54
|
pose: Pose;
|
|
55
55
|
};
|
|
56
|
-
/** Tiburoncín
|
|
57
|
-
declare function
|
|
58
|
-
type
|
|
59
|
-
|
|
56
|
+
/** Full-body Tiburoncín. */
|
|
57
|
+
declare function Mascot({ pose, basePath, alt, className, ...props }: MascotProps): react.JSX.Element;
|
|
58
|
+
type MascotFaceProps = Base & {
|
|
59
|
+
expression: Face;
|
|
60
60
|
};
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Tiburoncín's head, with an expression.
|
|
63
63
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
64
|
+
* Faces go ONLY in empty states, confirmations, errors, course progress and
|
|
65
|
+
* celebration. Never in a hero, pricing, services, contact or CV. That is why
|
|
66
|
+
* `EmptyState` takes a face and `PageHeader` does not: the rule is not written
|
|
67
|
+
* in a guide you have to remember, it is written into which components accept
|
|
68
|
+
* one.
|
|
68
69
|
*/
|
|
69
|
-
declare function
|
|
70
|
+
declare function MascotFace({ expression, basePath, alt, className, ...props }: MascotFaceProps): react.JSX.Element;
|
|
70
71
|
|
|
71
|
-
export {
|
|
72
|
+
export { Background, Face, Isotype, type IsotypeProps, Logo, type LogoProps, Mascot, MascotFace, type MascotFaceProps, type MascotProps, Pose };
|
package/dist/brand/index.d.ts
CHANGED
|
@@ -1,71 +1,72 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as
|
|
1
|
+
import { B as Background, P as Pose, F as Face } from '../catalog-D13txprv.js';
|
|
2
|
+
export { A as ASSETS_PATH, a as Fin, f as faceList, b as faceUsage, c as faces, d as fins, p as poseList, e as poses } from '../catalog-D13txprv.js';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ComponentPropsWithoutRef } from 'react';
|
|
5
5
|
|
|
6
|
-
type
|
|
6
|
+
type IsotypeProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* recordar.
|
|
8
|
+
* Which background it sits on. Deciding is mandatory even though it has a
|
|
9
|
+
* default: the fin's body is nearly black, so the two-blue variant disappears
|
|
10
|
+
* over abyss. Being a prop, the rule stops being something to remember.
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
background?: Background | undefined;
|
|
14
13
|
basePath?: string | undefined;
|
|
15
|
-
/**
|
|
14
|
+
/** Alt text. Empty when the isotype accompanies text that already names it. */
|
|
16
15
|
alt?: string | undefined;
|
|
17
16
|
};
|
|
18
|
-
declare function
|
|
17
|
+
declare function Isotype({ background, basePath, alt, className, ...props }: IsotypeProps): react.JSX.Element;
|
|
19
18
|
|
|
20
19
|
type LogoProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
21
|
-
|
|
20
|
+
background?: Background | undefined;
|
|
22
21
|
basePath?: string | undefined;
|
|
23
|
-
/**
|
|
24
|
-
|
|
22
|
+
/** Hides the wordmark and leaves only the fin, for very narrow bars. */
|
|
23
|
+
isotypeOnly?: boolean | undefined;
|
|
25
24
|
/**
|
|
26
|
-
*
|
|
25
|
+
* Adds the tagline under the wordmark, separated from the fin by a divider.
|
|
27
26
|
*
|
|
28
|
-
*
|
|
29
|
-
* `tagline.
|
|
30
|
-
*
|
|
27
|
+
* It is the shape the brand takes in the site's bar. The text comes from
|
|
28
|
+
* `tagline.short` and cannot be passed as a prop, for the same reason as the
|
|
29
|
+
* wordmark: a tagline hand-written across five projects is five taglines in
|
|
30
|
+
* six months.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
withTagline?: boolean | undefined;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* The wordmark comes from `naming.wordmark`, not from a hand-written string, and
|
|
36
|
+
* it always reads «Eduardo Álvarez». The mascot is called Tiburoncín and its
|
|
37
|
+
* name never appears inside the logo: there is no prop that changes the text.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* When the wordmark is hidden, the name still reaches the screen reader through
|
|
40
|
+
* the isotype's `alt`. A logo with no accessible name is an invisible logo.
|
|
41
41
|
*/
|
|
42
|
-
declare function Logo({
|
|
42
|
+
declare function Logo({ background, basePath, isotypeOnly, withTagline, className, ...props }: LogoProps): react.JSX.Element;
|
|
43
43
|
|
|
44
44
|
type Base = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
|
|
45
45
|
basePath?: string | undefined;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* Alt text. Empty by default: the mascot is illustration and the text beside
|
|
48
|
+
* it already says what there is to know. Fill it in only when the image
|
|
49
|
+
* carries information that is not written next to it.
|
|
50
50
|
*/
|
|
51
51
|
alt?: string | undefined;
|
|
52
52
|
};
|
|
53
|
-
type
|
|
53
|
+
type MascotProps = Base & {
|
|
54
54
|
pose: Pose;
|
|
55
55
|
};
|
|
56
|
-
/** Tiburoncín
|
|
57
|
-
declare function
|
|
58
|
-
type
|
|
59
|
-
|
|
56
|
+
/** Full-body Tiburoncín. */
|
|
57
|
+
declare function Mascot({ pose, basePath, alt, className, ...props }: MascotProps): react.JSX.Element;
|
|
58
|
+
type MascotFaceProps = Base & {
|
|
59
|
+
expression: Face;
|
|
60
60
|
};
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Tiburoncín's head, with an expression.
|
|
63
63
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
64
|
+
* Faces go ONLY in empty states, confirmations, errors, course progress and
|
|
65
|
+
* celebration. Never in a hero, pricing, services, contact or CV. That is why
|
|
66
|
+
* `EmptyState` takes a face and `PageHeader` does not: the rule is not written
|
|
67
|
+
* in a guide you have to remember, it is written into which components accept
|
|
68
|
+
* one.
|
|
68
69
|
*/
|
|
69
|
-
declare function
|
|
70
|
+
declare function MascotFace({ expression, basePath, alt, className, ...props }: MascotFaceProps): react.JSX.Element;
|
|
70
71
|
|
|
71
|
-
export {
|
|
72
|
+
export { Background, Face, Isotype, type IsotypeProps, Logo, type LogoProps, Mascot, MascotFace, type MascotFaceProps, type MascotProps, Pose };
|
package/dist/brand/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
import '../chunk-
|
|
4
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
export { Isotype, Logo, Mascot, MascotFace } from '../chunk-JN3IS5OS.js';
|
|
3
|
+
import '../chunk-2WPWEIMD.js';
|
|
4
|
+
export { ASSETS_PATH, faceList, faceUsage, faces, fins, poseList, poses } from '../chunk-CKRSQPTX.js';
|
|
5
|
+
import '../chunk-OMKSESQB.js';
|
|
5
6
|
import '../chunk-MLKGABMK.js';
|