@eduardoalvarez/arrecife 0.5.0 → 0.6.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 +52 -0
- package/README.md +706 -470
- 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-25YNFCIF.js +141 -0
- package/dist/{chunk-YZ2SDOVZ.js → chunk-6O3KWB6P.js} +30 -30
- package/dist/chunk-CKRSQPTX.js +36 -0
- package/dist/{chunk-ZEOQKRQ7.js → chunk-DKCN7BAL.js} +1 -1
- package/dist/chunk-GCRII2KQ.js +86 -0
- package/dist/chunk-JMOOFZ3B.js +42 -0
- package/dist/chunk-O4TAH7YJ.js +276 -0
- package/dist/chunk-ODBFN44D.js +45 -0
- package/dist/{chunk-VPT32GPG.js → chunk-PMN7NR3G.js} +2 -2
- package/dist/chunk-XKYHTOUJ.js +27 -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/index.cjs +1068 -929
- package/dist/index.d.cts +770 -773
- package/dist/index.d.ts +770 -773
- package/dist/index.js +629 -675
- 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 +130 -130
- 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/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 +133 -86
- package/dist/tokens/index.d.cts +246 -161
- package/dist/tokens/index.d.ts +246 -161
- package/dist/tokens/index.js +2 -2
- package/dist/tokens/theme.css +133 -98
- package/dist/variants/index.cjs +192 -0
- package/dist/variants/index.d.cts +192 -0
- package/dist/variants/index.d.ts +192 -0
- package/dist/variants/index.js +3 -0
- package/llms.txt +810 -744
- package/package.json +20 -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
|
@@ -4,10 +4,10 @@ import * as LabelPrimitive from '@radix-ui/react-label';
|
|
|
4
4
|
|
|
5
5
|
type LabelProps = ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* The `label` scale: 13px, which is the system's absolute minimum on screen.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* It dims together with the control when that control is disabled, so the
|
|
10
|
+
* label-control pair always reads as a single unit.
|
|
11
11
|
*/
|
|
12
12
|
declare function Label({ className, ...props }: LabelProps): react.JSX.Element;
|
|
13
13
|
|
|
@@ -4,10 +4,10 @@ import * as LabelPrimitive from '@radix-ui/react-label';
|
|
|
4
4
|
|
|
5
5
|
type LabelProps = ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* The `label` scale: 13px, which is the system's absolute minimum on screen.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* It dims together with the control when that control is disabled, so the
|
|
10
|
+
* label-control pair always reads as a single unit.
|
|
11
11
|
*/
|
|
12
12
|
declare function Label({ className, ...props }: LabelProps): react.JSX.Element;
|
|
13
13
|
|
package/dist/og/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// src/brand/
|
|
4
|
-
var
|
|
3
|
+
// src/brand/catalog.ts
|
|
4
|
+
var faces = {
|
|
5
5
|
annoyed: "face-annoyed.png",
|
|
6
6
|
confused: "face-confused.png",
|
|
7
7
|
hearts: "face-hearts.png",
|
|
@@ -16,95 +16,95 @@ var poses = {
|
|
|
16
16
|
peek: "pose-peek.png",
|
|
17
17
|
surf: "pose-surf.png"
|
|
18
18
|
};
|
|
19
|
-
var
|
|
20
|
-
/**
|
|
19
|
+
var fins = {
|
|
20
|
+
/** Two blues. For light backgrounds. */
|
|
21
21
|
color: "fin.png",
|
|
22
|
-
/**
|
|
23
|
-
|
|
22
|
+
/** Single-ink silhouette. For dark backgrounds. */
|
|
23
|
+
foam: "fin-foam.png"
|
|
24
24
|
};
|
|
25
|
-
var
|
|
25
|
+
var ASSETS_PATH = "/brand";
|
|
26
26
|
|
|
27
27
|
// src/tokens/tokens.ts
|
|
28
28
|
var dark = {
|
|
29
29
|
background: "#091319",
|
|
30
|
-
//
|
|
30
|
+
// current · menus, active tabs
|
|
31
31
|
border: "#22414F",
|
|
32
|
-
// hairline
|
|
32
|
+
// hairline on card hover
|
|
33
33
|
textPrimary: "#EDF4F3",
|
|
34
|
-
//
|
|
34
|
+
// foam 16.84:1
|
|
35
35
|
textSecondary: "#A7BCC4",
|
|
36
|
-
//
|
|
36
|
+
// plankton 5.57:1 never under 13px
|
|
37
37
|
accent: "#35D6C0",
|
|
38
|
-
//
|
|
38
|
+
// ink over biolume
|
|
39
39
|
warm: "#F2A65A"};
|
|
40
40
|
var light = {
|
|
41
41
|
background: "#F6F2EA",
|
|
42
42
|
surfaceRaised: "#EFE9DE",
|
|
43
|
-
// hairline
|
|
43
|
+
// hairline on card hover
|
|
44
44
|
textPrimary: "#0B1524",
|
|
45
45
|
// 16.40:1
|
|
46
46
|
textSecondary: "#3D4B58",
|
|
47
47
|
warm: "#A65B27"};
|
|
48
48
|
var fonts = {
|
|
49
|
-
/**
|
|
49
|
+
/** Headlines and large numbers ONLY. Never body copy. */
|
|
50
50
|
display: '"Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif',
|
|
51
|
-
/**
|
|
51
|
+
/** Body and interface. */
|
|
52
52
|
sans: '"Geist", ui-sans-serif, system-ui, sans-serif',
|
|
53
|
-
/**
|
|
53
|
+
/** Code, paths, labels, metadata, the CLI signature. */
|
|
54
54
|
mono: '"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace'
|
|
55
55
|
};
|
|
56
56
|
var typeScale = {
|
|
57
57
|
h1: { tracking: "-0.03em" },
|
|
58
58
|
eyebrow: { tracking: "0.12em"}
|
|
59
59
|
};
|
|
60
|
-
var
|
|
60
|
+
var deep = "#0D2129";
|
|
61
61
|
var gradient = {
|
|
62
62
|
dark: {
|
|
63
|
-
/**
|
|
64
|
-
og: `linear-gradient(145deg, ${dark.background} 55%, ${
|
|
63
|
+
/** The one used by the article OG template. 145°, from the document. */
|
|
64
|
+
og: `linear-gradient(145deg, ${dark.background} 55%, ${deep} 100%)`
|
|
65
65
|
},
|
|
66
66
|
light: {
|
|
67
67
|
og: `linear-gradient(145deg, ${light.background} 55%, ${light.surfaceRaised} 100%)`
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
var tagline = {
|
|
71
|
-
/** Header,
|
|
72
|
-
|
|
71
|
+
/** Header, one line. */
|
|
72
|
+
short: "Ayudo a equipos a escalar con criterio"};
|
|
73
73
|
var naming = {
|
|
74
74
|
wordmark: "Eduardo \xC1lvarez",
|
|
75
|
-
/**
|
|
75
|
+
/** The domain, for the footer CLI signature: `$ cd ~/eduardoalvarez.dev/2026`. */
|
|
76
76
|
domain: "eduardoalvarez.dev"
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
// src/og/
|
|
79
|
+
// src/og/templates.ts
|
|
80
80
|
var OG = {
|
|
81
81
|
width: 1200,
|
|
82
82
|
height: 630,
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
|
|
83
|
+
margin: 64,
|
|
84
|
+
/** The mascot's maximum height. */
|
|
85
|
+
mascot: 430,
|
|
86
|
+
/** The signature's fin. */
|
|
87
|
+
signatureFin: 34,
|
|
88
88
|
/**
|
|
89
|
-
*
|
|
89
|
+
* The gap the column leaves when the pose goes on the left (course).
|
|
90
90
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
91
|
+
* It is 560 and not 420 because a full pose at 430 tall measures ~534 wide:
|
|
92
|
+
* with the exact gap, the shark ate into the headline. The reserve is measured
|
|
93
|
+
* by the pose's real width, not by the margin.
|
|
94
94
|
*/
|
|
95
|
-
|
|
95
|
+
mascotReserve: 560
|
|
96
96
|
};
|
|
97
97
|
function el(type, props, children) {
|
|
98
98
|
return { type, props: children === void 0 ? props : { ...props, children } };
|
|
99
99
|
}
|
|
100
|
-
function
|
|
100
|
+
function box(style, children) {
|
|
101
101
|
return el("div", { style: { display: "flex", ...style } }, children);
|
|
102
102
|
}
|
|
103
|
-
function
|
|
104
|
-
return el("div", { style: { display: "flex", ...style } },
|
|
103
|
+
function text(style, content) {
|
|
104
|
+
return el("div", { style: { display: "flex", ...style } }, content);
|
|
105
105
|
}
|
|
106
|
-
function eyebrow(
|
|
107
|
-
return
|
|
106
|
+
function eyebrow(content, color) {
|
|
107
|
+
return text(
|
|
108
108
|
{
|
|
109
109
|
fontFamily: fonts.mono,
|
|
110
110
|
fontSize: 20,
|
|
@@ -112,11 +112,11 @@ function eyebrow(contenido, color) {
|
|
|
112
112
|
textTransform: "uppercase",
|
|
113
113
|
color
|
|
114
114
|
},
|
|
115
|
-
|
|
115
|
+
content
|
|
116
116
|
);
|
|
117
117
|
}
|
|
118
|
-
function
|
|
119
|
-
return
|
|
118
|
+
function headline(content, color) {
|
|
119
|
+
return text(
|
|
120
120
|
{
|
|
121
121
|
fontFamily: fonts.display,
|
|
122
122
|
fontSize: 58,
|
|
@@ -124,8 +124,8 @@ function titular(contenido, color) {
|
|
|
124
124
|
lineHeight: 1.06,
|
|
125
125
|
letterSpacing: typeScale.h1.tracking,
|
|
126
126
|
color,
|
|
127
|
-
// 70 %
|
|
128
|
-
//
|
|
127
|
+
// 70 % of the CANVAS, not of the column. With the mascot in a column of
|
|
128
|
+
// its own, a relative 70 % gave ~400px and the headline truncated mid-word.
|
|
129
129
|
maxWidth: OG.width * 0.7,
|
|
130
130
|
display: "-webkit-box",
|
|
131
131
|
WebkitBoxOrient: "vertical",
|
|
@@ -133,144 +133,144 @@ function titular(contenido, color) {
|
|
|
133
133
|
overflow: "hidden",
|
|
134
134
|
textOverflow: "ellipsis"
|
|
135
135
|
},
|
|
136
|
-
|
|
136
|
+
content
|
|
137
137
|
);
|
|
138
138
|
}
|
|
139
|
-
function
|
|
140
|
-
return
|
|
139
|
+
function signature(content, color, mode, base) {
|
|
140
|
+
return box({ alignItems: "center", gap: 14 }, [
|
|
141
141
|
el("img", {
|
|
142
142
|
alt: "",
|
|
143
|
-
src: `${base}/${
|
|
144
|
-
height: OG.
|
|
145
|
-
style: { height: OG.
|
|
143
|
+
src: `${base}/${mode === "dark" ? fins.foam : fins.color}`,
|
|
144
|
+
height: OG.signatureFin,
|
|
145
|
+
style: { height: OG.signatureFin }
|
|
146
146
|
}),
|
|
147
|
-
|
|
147
|
+
text({ fontFamily: fonts.mono, fontSize: 21, color }, content)
|
|
148
148
|
]);
|
|
149
149
|
}
|
|
150
|
-
function
|
|
151
|
-
const
|
|
150
|
+
function card(options) {
|
|
151
|
+
const column = box(
|
|
152
152
|
{
|
|
153
153
|
position: "relative",
|
|
154
154
|
flexDirection: "column",
|
|
155
155
|
justifyContent: "space-between",
|
|
156
156
|
width: "100%",
|
|
157
157
|
height: "100%",
|
|
158
|
-
padding: OG.
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
paddingLeft:
|
|
158
|
+
padding: OG.margin,
|
|
159
|
+
// When the pose goes on the left it needs the gap left for it: it is the
|
|
160
|
+
// only thing that changes in the grid, and only the course template does it.
|
|
161
|
+
paddingLeft: options.mascotaIzquierda ? OG.mascotReserve : OG.margin
|
|
162
162
|
},
|
|
163
163
|
[
|
|
164
|
-
eyebrow(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
eyebrow(options.eyebrow.text, options.eyebrow.color),
|
|
165
|
+
box({ flexDirection: "column", gap: 18 }, [
|
|
166
|
+
headline(options.title, options.tinta),
|
|
167
|
+
options.bajada ? text(
|
|
168
168
|
{
|
|
169
169
|
fontFamily: fonts.sans,
|
|
170
170
|
fontSize: 26,
|
|
171
|
-
color:
|
|
171
|
+
color: options.tintaSecundaria,
|
|
172
172
|
maxWidth: OG.width * 0.7
|
|
173
173
|
},
|
|
174
|
-
|
|
174
|
+
options.bajada
|
|
175
175
|
) : null
|
|
176
176
|
]),
|
|
177
|
-
|
|
177
|
+
signature(options.signature, options.firmaColor, options.mode, options.base)
|
|
178
178
|
]
|
|
179
179
|
);
|
|
180
|
-
return
|
|
180
|
+
return box(
|
|
181
181
|
{
|
|
182
182
|
position: "relative",
|
|
183
183
|
width: OG.width,
|
|
184
184
|
height: OG.height,
|
|
185
|
-
backgroundImage:
|
|
186
|
-
backgroundColor:
|
|
185
|
+
backgroundImage: options.background,
|
|
186
|
+
backgroundColor: options.mode === "dark" ? dark.background : light.background,
|
|
187
187
|
fontFamily: fonts.sans,
|
|
188
188
|
overflow: "hidden"
|
|
189
189
|
},
|
|
190
190
|
[
|
|
191
|
-
|
|
191
|
+
options.mascot ? box(
|
|
192
192
|
{
|
|
193
193
|
position: "absolute",
|
|
194
194
|
bottom: 0,
|
|
195
|
-
...
|
|
195
|
+
...options.mascotaIzquierda ? { left: 0 } : { right: 0 },
|
|
196
196
|
alignItems: "flex-end"
|
|
197
197
|
},
|
|
198
|
-
|
|
198
|
+
options.mascot
|
|
199
199
|
) : null,
|
|
200
|
-
|
|
200
|
+
column
|
|
201
201
|
]
|
|
202
202
|
);
|
|
203
203
|
}
|
|
204
|
-
function
|
|
205
|
-
return el("img", { alt: "", src: `${base}/${poses[pose]}`, height
|
|
204
|
+
function mascotPose(pose, base, height = OG.mascot) {
|
|
205
|
+
return el("img", { alt: "", src: `${base}/${poses[pose]}`, height, style: { height } });
|
|
206
206
|
}
|
|
207
|
-
function
|
|
208
|
-
const base =
|
|
209
|
-
const
|
|
210
|
-
const meta = [
|
|
211
|
-
return
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
eyebrow: {
|
|
215
|
-
title:
|
|
216
|
-
|
|
207
|
+
function articleTemplate(data) {
|
|
208
|
+
const base = data.basePath ?? ASSETS_PATH;
|
|
209
|
+
const face = data.expression ?? "hearts";
|
|
210
|
+
const meta = [data.category, data.readingMinutes ? `${data.readingMinutes} min` : void 0].filter(Boolean).join(" \xB7 ");
|
|
211
|
+
return card({
|
|
212
|
+
mode: "dark",
|
|
213
|
+
background: gradient.dark.og,
|
|
214
|
+
eyebrow: { text: meta || "art\xEDculo", color: dark.warm },
|
|
215
|
+
title: data.title,
|
|
216
|
+
signature: naming.domain,
|
|
217
217
|
firmaColor: dark.textSecondary,
|
|
218
218
|
base,
|
|
219
219
|
tinta: dark.textPrimary,
|
|
220
220
|
tintaSecundaria: dark.textSecondary,
|
|
221
|
-
|
|
221
|
+
mascot: el("img", {
|
|
222
222
|
alt: "",
|
|
223
|
-
src: `${base}/${
|
|
223
|
+
src: `${base}/${faces[face]}`,
|
|
224
224
|
height: 300,
|
|
225
|
-
style: { height: 300, marginBottom: OG.
|
|
225
|
+
style: { height: 300, marginBottom: OG.margin, marginRight: OG.margin }
|
|
226
226
|
})
|
|
227
227
|
});
|
|
228
228
|
}
|
|
229
|
-
function
|
|
230
|
-
const base =
|
|
231
|
-
const meta = [
|
|
232
|
-
return
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
eyebrow: {
|
|
236
|
-
title:
|
|
229
|
+
function courseTemplate(data) {
|
|
230
|
+
const base = data.basePath ?? ASSETS_PATH;
|
|
231
|
+
const meta = [data.modules ? `${data.modules} m\xF3dulos` : void 0, data.duration].filter(Boolean).join(" \xB7 ");
|
|
232
|
+
return card({
|
|
233
|
+
mode: "light",
|
|
234
|
+
background: gradient.light.og,
|
|
235
|
+
eyebrow: { text: "nuevo curso", color: light.warm },
|
|
236
|
+
title: data.title,
|
|
237
237
|
bajada: meta || void 0,
|
|
238
|
-
|
|
238
|
+
signature: data.url ?? `cursos.${naming.domain}`,
|
|
239
239
|
firmaColor: light.warm,
|
|
240
240
|
base,
|
|
241
241
|
tinta: light.textPrimary,
|
|
242
242
|
tintaSecundaria: light.textSecondary,
|
|
243
243
|
mascotaIzquierda: true,
|
|
244
|
-
|
|
244
|
+
mascot: mascotPose(data.pose ?? "desk", base)
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
|
-
function
|
|
248
|
-
const base =
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
return
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
eyebrow: {
|
|
255
|
-
title:
|
|
256
|
-
bajada:
|
|
257
|
-
|
|
247
|
+
function talkTemplate(data) {
|
|
248
|
+
const base = data.basePath ?? ASSETS_PATH;
|
|
249
|
+
const head = ["charla", data.event, data.year].filter(Boolean).join(" \xB7 ");
|
|
250
|
+
const footer = [data.location, data.event ? void 0 : naming.domain].filter(Boolean).join(" \xB7 ");
|
|
251
|
+
return card({
|
|
252
|
+
mode: "dark",
|
|
253
|
+
background: "none",
|
|
254
|
+
eyebrow: { text: head, color: dark.accent },
|
|
255
|
+
title: data.title,
|
|
256
|
+
bajada: data.summary,
|
|
257
|
+
signature: footer || naming.domain,
|
|
258
258
|
firmaColor: dark.textSecondary,
|
|
259
259
|
base,
|
|
260
260
|
tinta: dark.textPrimary,
|
|
261
261
|
tintaSecundaria: dark.textSecondary,
|
|
262
|
-
//
|
|
263
|
-
|
|
262
|
+
// It bleeds: it runs off the bottom and the right, like a slide cover.
|
|
263
|
+
mascot: el("img", {
|
|
264
264
|
alt: "",
|
|
265
|
-
src: `${base}/${poses[
|
|
265
|
+
src: `${base}/${poses[data.pose ?? "surf"]}`,
|
|
266
266
|
height: 470,
|
|
267
267
|
style: { height: 470, marginBottom: -46, marginRight: -36 }
|
|
268
268
|
})
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
|
-
function
|
|
272
|
-
const base =
|
|
273
|
-
return
|
|
271
|
+
function defaultTemplate(data = {}) {
|
|
272
|
+
const base = data.basePath ?? ASSETS_PATH;
|
|
273
|
+
return box(
|
|
274
274
|
{
|
|
275
275
|
width: OG.width,
|
|
276
276
|
height: OG.height,
|
|
@@ -279,11 +279,11 @@ function plantillaDefecto(datos = {}) {
|
|
|
279
279
|
fontFamily: fonts.sans
|
|
280
280
|
},
|
|
281
281
|
[
|
|
282
|
-
//
|
|
283
|
-
|
|
282
|
+
// The fin's column: 290 wide, which is where the divider falls.
|
|
283
|
+
box(
|
|
284
284
|
{ width: 290, height: "100%", alignItems: "center", justifyContent: "center" },
|
|
285
|
-
//
|
|
286
|
-
|
|
285
|
+
// The halo. A circle of biolume at 12 % behind the fin.
|
|
286
|
+
box(
|
|
287
287
|
{
|
|
288
288
|
width: 260,
|
|
289
289
|
height: 260,
|
|
@@ -292,21 +292,21 @@ function plantillaDefecto(datos = {}) {
|
|
|
292
292
|
alignItems: "center",
|
|
293
293
|
justifyContent: "center"
|
|
294
294
|
},
|
|
295
|
-
el("img", { alt: "", src: `${base}/${
|
|
295
|
+
el("img", { alt: "", src: `${base}/${fins.foam}`, height: 200, style: { height: 200 } })
|
|
296
296
|
)
|
|
297
297
|
),
|
|
298
|
-
//
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
{ flexDirection: "column", gap: 20, paddingLeft: OG.
|
|
298
|
+
// The divider, exactly at x=290.
|
|
299
|
+
box({ width: 1, height: 340, backgroundColor: dark.border }),
|
|
300
|
+
box(
|
|
301
|
+
{ flexDirection: "column", gap: 20, paddingLeft: OG.margin, paddingRight: OG.margin, flex: 1 },
|
|
302
302
|
[
|
|
303
|
-
|
|
303
|
+
text(
|
|
304
304
|
{ fontFamily: fonts.sans, fontSize: 72, fontWeight: 700, color: dark.textPrimary, lineHeight: 1.05 },
|
|
305
|
-
|
|
305
|
+
data.title ?? naming.wordmark
|
|
306
306
|
),
|
|
307
|
-
|
|
307
|
+
text(
|
|
308
308
|
{ fontFamily: fonts.sans, fontSize: 28, fontWeight: 400, color: dark.textSecondary, lineHeight: 1.4 },
|
|
309
|
-
|
|
309
|
+
data.description ?? tagline.short
|
|
310
310
|
)
|
|
311
311
|
]
|
|
312
312
|
)
|
|
@@ -315,8 +315,8 @@ function plantillaDefecto(datos = {}) {
|
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
exports.OG = OG;
|
|
318
|
-
exports.
|
|
319
|
-
exports.
|
|
320
|
-
exports.
|
|
321
|
-
exports.
|
|
322
|
-
exports.
|
|
318
|
+
exports.articleTemplate = articleTemplate;
|
|
319
|
+
exports.courseTemplate = courseTemplate;
|
|
320
|
+
exports.defaultTemplate = defaultTemplate;
|
|
321
|
+
exports.plantillaBase = card;
|
|
322
|
+
exports.talkTemplate = talkTemplate;
|