@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/og/index.d.cts
CHANGED
|
@@ -1,164 +1,168 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as Face, P as Pose } from '../catalog-D13txprv.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* The four Open Graph templates, 1200×630.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* They are NOT React components. They return the element tree Satori expects —
|
|
7
|
+
* `{ type, props }` — built only from tokens and from the brand catalog, which
|
|
8
|
+
* is pure data. This module can be imported from a worker, a build script or an
|
|
9
|
+
* edge function without mounting anything.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* It is the case that justifies the `src/tokens/` constraint: if a token had
|
|
12
|
+
* ended up depending on a component, this file would not exist.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* THERE IS ONE GRID, from the document: eyebrow on top, headline on the left,
|
|
15
|
+
* signature at the bottom and the mascot anchored to the right. The only things
|
|
16
|
+
* that change between templates are the background and which pose comes in.
|
|
17
|
+
* Which is why there are not four layouts here: there is one, and three
|
|
18
|
+
* parameters.
|
|
18
19
|
*
|
|
19
|
-
*
|
|
20
|
-
* eyebrow
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* canvas 1200×630 · margin 64
|
|
21
|
+
* eyebrow mono 20 · tracking 0.12em
|
|
22
|
+
* headline display 800 · 58 · max 3 lines at 70 % of the width
|
|
23
|
+
* signature mono 21 · with the fin at 34
|
|
24
|
+
* mascot anchored right · max height 430
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* display.
|
|
28
|
-
*
|
|
26
|
+
* The default one is the declared exception: a two-column grid of its own with
|
|
27
|
+
* the fin at 200 and a divider at x=290, and Geist 72/700 and 28/400 instead of
|
|
28
|
+
* the display face. It is in the document as an exception, so it is here as a
|
|
29
|
+
* separate function and not as an `if` inside the shared one.
|
|
29
30
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
31
|
+
* THE FIN IS NOT A PARAMETER. The document warns that «it is the easiest
|
|
32
|
+
* mistake to make in a generator, because the background is a parameter»: foam
|
|
33
|
+
* in the three dark templates, two blues in the course one. Here it is chosen by
|
|
34
|
+
* the template's mode, the same way `Isotype` chooses it from `background`.
|
|
35
|
+
* There is no way to ask for the bad combination.
|
|
35
36
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
37
|
+
* The headline truncates to 3 lines with an ellipsis and NEVER shrinks: a
|
|
38
|
+
* headline at 44 and another at 58 in the same feed read as two different
|
|
39
|
+
* brands.
|
|
38
40
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
41
|
+
* The images carry `alt=''`. Satori does not need it — it paints to SVG — but
|
|
42
|
+
* the mascot and the fin ARE decorative here: what the card says is the
|
|
43
|
+
* headline, and an OG's `alt` is set by the page's
|
|
44
|
+
* `<meta property="og:image:alt">`. On top of that, the story mounts them as
|
|
45
|
+
* real `<img>` elements and without `alt` they do not pass axe.
|
|
43
46
|
*
|
|
44
|
-
*
|
|
47
|
+
* Usage:
|
|
45
48
|
*
|
|
46
49
|
* import satori from 'satori';
|
|
47
|
-
* import {
|
|
50
|
+
* import { articleTemplate, OG } from '@eduardoalvarez/arrecife/og';
|
|
48
51
|
*
|
|
49
|
-
* const svg = await satori(
|
|
52
|
+
* const svg = await satori(articleTemplate({ title, category, readingMinutes }), {
|
|
50
53
|
* width: OG.width,
|
|
51
54
|
* height: OG.height,
|
|
52
55
|
* fonts: [...],
|
|
53
56
|
* });
|
|
54
57
|
*/
|
|
55
58
|
|
|
56
|
-
type
|
|
59
|
+
type SatoriNode = {
|
|
57
60
|
type: string;
|
|
58
61
|
props: Record<string, unknown> & {
|
|
59
62
|
style?: Record<string, string | number>;
|
|
60
|
-
children?:
|
|
63
|
+
children?: Child | readonly Child[];
|
|
61
64
|
};
|
|
62
65
|
};
|
|
63
|
-
type
|
|
64
|
-
/**
|
|
66
|
+
type Child = SatoriNode | string | null | undefined | false;
|
|
67
|
+
/** The canvas and the grid. These are the production measurements. */
|
|
65
68
|
declare const OG: {
|
|
66
69
|
readonly width: 1200;
|
|
67
70
|
readonly height: 630;
|
|
68
|
-
readonly
|
|
69
|
-
/**
|
|
70
|
-
readonly
|
|
71
|
-
/**
|
|
72
|
-
readonly
|
|
71
|
+
readonly margin: 64;
|
|
72
|
+
/** The mascot's maximum height. */
|
|
73
|
+
readonly mascot: 430;
|
|
74
|
+
/** The signature's fin. */
|
|
75
|
+
readonly signatureFin: 34;
|
|
73
76
|
/**
|
|
74
|
-
*
|
|
77
|
+
* The gap the column leaves when the pose goes on the left (course).
|
|
75
78
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
+
* It is 560 and not 420 because a full pose at 430 tall measures ~534 wide:
|
|
80
|
+
* with the exact gap, the shark ate into the headline. The reserve is measured
|
|
81
|
+
* by the pose's real width, not by the margin.
|
|
79
82
|
*/
|
|
80
|
-
readonly
|
|
83
|
+
readonly mascotReserve: 560;
|
|
81
84
|
};
|
|
82
|
-
type
|
|
85
|
+
type BaseData = {
|
|
83
86
|
title: string;
|
|
84
87
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
88
|
+
* Where the PNGs are served from. Satori does not read from disk: in a worker
|
|
89
|
+
* this has to be an absolute URL or a `data:` URI.
|
|
87
90
|
*/
|
|
88
91
|
basePath?: string | undefined;
|
|
89
92
|
};
|
|
90
93
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
94
|
+
* The shared grid. Three of the four templates are this with a different
|
|
95
|
+
* background and a different mascot piece.
|
|
93
96
|
*/
|
|
94
|
-
declare function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
declare function card(options: {
|
|
98
|
+
mode: 'dark' | 'light';
|
|
99
|
+
background: string;
|
|
97
100
|
eyebrow: {
|
|
98
|
-
|
|
101
|
+
text: string;
|
|
99
102
|
color: string;
|
|
100
103
|
};
|
|
101
104
|
title: string;
|
|
102
|
-
/**
|
|
105
|
+
/** A line under the headline, optional. */
|
|
103
106
|
bajada?: string | undefined;
|
|
104
|
-
|
|
107
|
+
signature: string;
|
|
105
108
|
firmaColor: string;
|
|
106
109
|
base: string;
|
|
107
|
-
/**
|
|
108
|
-
|
|
109
|
-
/** `curso`
|
|
110
|
+
/** The right-hand piece, already assembled. */
|
|
111
|
+
mascot?: SatoriNode | null | undefined;
|
|
112
|
+
/** `curso` puts it on the left: it is the only one that inverts the grid. */
|
|
110
113
|
mascotaIzquierda?: boolean | undefined;
|
|
111
114
|
tinta: string;
|
|
112
115
|
tintaSecundaria: string;
|
|
113
|
-
}):
|
|
114
|
-
type
|
|
115
|
-
/**
|
|
116
|
+
}): SatoriNode;
|
|
117
|
+
type ArticleData = BaseData & {
|
|
118
|
+
/** The category slug. It goes in sand, in small caps. */
|
|
116
119
|
category?: string | undefined;
|
|
117
120
|
readingMinutes?: number | undefined;
|
|
118
121
|
/**
|
|
119
|
-
*
|
|
120
|
-
* `hearts`
|
|
122
|
+
* The face, «according to the text's tone». There is no default meant as
|
|
123
|
+
* neutral: `hearts` is the one the manual assigns to the article OG.
|
|
121
124
|
*/
|
|
122
|
-
|
|
125
|
+
expression?: Face | undefined;
|
|
123
126
|
};
|
|
124
|
-
/**
|
|
125
|
-
declare function
|
|
126
|
-
type
|
|
127
|
+
/** Article · 145° gradient over abyss, category and reading time in sand. */
|
|
128
|
+
declare function articleTemplate(data: ArticleData): SatoriNode;
|
|
129
|
+
type CourseData = BaseData & {
|
|
127
130
|
modules?: number | undefined;
|
|
128
131
|
duration?: string | undefined;
|
|
129
|
-
/**
|
|
132
|
+
/** The footer's domain. The courses subdomain by default. */
|
|
130
133
|
url?: string | undefined;
|
|
131
134
|
pose?: Pose | undefined;
|
|
132
135
|
};
|
|
133
136
|
/**
|
|
134
|
-
*
|
|
137
|
+
* Course · THE ONLY LIGHT TEMPLATE.
|
|
135
138
|
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
+
* Full pose on the left — it inverts the grid — eyebrow and URL in dark sand,
|
|
140
|
+
* and therefore the two-blue fin. That last part is not decided here: it follows
|
|
141
|
+
* from the mode being light.
|
|
139
142
|
*/
|
|
140
|
-
declare function
|
|
141
|
-
type
|
|
143
|
+
declare function courseTemplate(data: CourseData): SatoriNode;
|
|
144
|
+
type TalkData = BaseData & {
|
|
142
145
|
event?: string | undefined;
|
|
143
146
|
year?: string | number | undefined;
|
|
144
147
|
location?: string | undefined;
|
|
145
148
|
summary?: string | undefined;
|
|
146
149
|
pose?: Pose | undefined;
|
|
147
150
|
};
|
|
148
|
-
/**
|
|
149
|
-
declare function
|
|
150
|
-
type
|
|
151
|
-
/**
|
|
151
|
+
/** Talk · eyebrow in biolume with the event and year, pose bleeding off the corner. */
|
|
152
|
+
declare function talkTemplate(data: TalkData): SatoriNode;
|
|
153
|
+
type DefaultData = Omit<BaseData, 'title'> & {
|
|
154
|
+
/** The name. The wordmark by default. */
|
|
152
155
|
title?: string | undefined;
|
|
153
156
|
description?: string | undefined;
|
|
154
157
|
};
|
|
155
158
|
/**
|
|
156
|
-
*
|
|
159
|
+
* Default · the document's declared exception.
|
|
157
160
|
*
|
|
158
|
-
*
|
|
159
|
-
* x=290
|
|
160
|
-
*
|
|
161
|
+
* A two-column grid of its own: the fin in biolume at 200 with a halo, a divider
|
|
162
|
+
* at x=290 and Geist 72/700 and 28/400 — NOT the display face. It does not share
|
|
163
|
+
* the shell with the other three because the document says the generator defines
|
|
164
|
+
* it, not the table.
|
|
161
165
|
*/
|
|
162
|
-
declare function
|
|
166
|
+
declare function defaultTemplate(data?: DefaultData): SatoriNode;
|
|
163
167
|
|
|
164
|
-
export { type
|
|
168
|
+
export { type ArticleData, type BaseData, type CourseData, type DefaultData, OG, type SatoriNode, type TalkData, articleTemplate, courseTemplate, defaultTemplate, card as plantillaBase, talkTemplate };
|
package/dist/og/index.d.ts
CHANGED
|
@@ -1,164 +1,168 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as Face, P as Pose } from '../catalog-D13txprv.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* The four Open Graph templates, 1200×630.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* They are NOT React components. They return the element tree Satori expects —
|
|
7
|
+
* `{ type, props }` — built only from tokens and from the brand catalog, which
|
|
8
|
+
* is pure data. This module can be imported from a worker, a build script or an
|
|
9
|
+
* edge function without mounting anything.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* It is the case that justifies the `src/tokens/` constraint: if a token had
|
|
12
|
+
* ended up depending on a component, this file would not exist.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* THERE IS ONE GRID, from the document: eyebrow on top, headline on the left,
|
|
15
|
+
* signature at the bottom and the mascot anchored to the right. The only things
|
|
16
|
+
* that change between templates are the background and which pose comes in.
|
|
17
|
+
* Which is why there are not four layouts here: there is one, and three
|
|
18
|
+
* parameters.
|
|
18
19
|
*
|
|
19
|
-
*
|
|
20
|
-
* eyebrow
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* canvas 1200×630 · margin 64
|
|
21
|
+
* eyebrow mono 20 · tracking 0.12em
|
|
22
|
+
* headline display 800 · 58 · max 3 lines at 70 % of the width
|
|
23
|
+
* signature mono 21 · with the fin at 34
|
|
24
|
+
* mascot anchored right · max height 430
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* display.
|
|
28
|
-
*
|
|
26
|
+
* The default one is the declared exception: a two-column grid of its own with
|
|
27
|
+
* the fin at 200 and a divider at x=290, and Geist 72/700 and 28/400 instead of
|
|
28
|
+
* the display face. It is in the document as an exception, so it is here as a
|
|
29
|
+
* separate function and not as an `if` inside the shared one.
|
|
29
30
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
31
|
+
* THE FIN IS NOT A PARAMETER. The document warns that «it is the easiest
|
|
32
|
+
* mistake to make in a generator, because the background is a parameter»: foam
|
|
33
|
+
* in the three dark templates, two blues in the course one. Here it is chosen by
|
|
34
|
+
* the template's mode, the same way `Isotype` chooses it from `background`.
|
|
35
|
+
* There is no way to ask for the bad combination.
|
|
35
36
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
37
|
+
* The headline truncates to 3 lines with an ellipsis and NEVER shrinks: a
|
|
38
|
+
* headline at 44 and another at 58 in the same feed read as two different
|
|
39
|
+
* brands.
|
|
38
40
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
41
|
+
* The images carry `alt=''`. Satori does not need it — it paints to SVG — but
|
|
42
|
+
* the mascot and the fin ARE decorative here: what the card says is the
|
|
43
|
+
* headline, and an OG's `alt` is set by the page's
|
|
44
|
+
* `<meta property="og:image:alt">`. On top of that, the story mounts them as
|
|
45
|
+
* real `<img>` elements and without `alt` they do not pass axe.
|
|
43
46
|
*
|
|
44
|
-
*
|
|
47
|
+
* Usage:
|
|
45
48
|
*
|
|
46
49
|
* import satori from 'satori';
|
|
47
|
-
* import {
|
|
50
|
+
* import { articleTemplate, OG } from '@eduardoalvarez/arrecife/og';
|
|
48
51
|
*
|
|
49
|
-
* const svg = await satori(
|
|
52
|
+
* const svg = await satori(articleTemplate({ title, category, readingMinutes }), {
|
|
50
53
|
* width: OG.width,
|
|
51
54
|
* height: OG.height,
|
|
52
55
|
* fonts: [...],
|
|
53
56
|
* });
|
|
54
57
|
*/
|
|
55
58
|
|
|
56
|
-
type
|
|
59
|
+
type SatoriNode = {
|
|
57
60
|
type: string;
|
|
58
61
|
props: Record<string, unknown> & {
|
|
59
62
|
style?: Record<string, string | number>;
|
|
60
|
-
children?:
|
|
63
|
+
children?: Child | readonly Child[];
|
|
61
64
|
};
|
|
62
65
|
};
|
|
63
|
-
type
|
|
64
|
-
/**
|
|
66
|
+
type Child = SatoriNode | string | null | undefined | false;
|
|
67
|
+
/** The canvas and the grid. These are the production measurements. */
|
|
65
68
|
declare const OG: {
|
|
66
69
|
readonly width: 1200;
|
|
67
70
|
readonly height: 630;
|
|
68
|
-
readonly
|
|
69
|
-
/**
|
|
70
|
-
readonly
|
|
71
|
-
/**
|
|
72
|
-
readonly
|
|
71
|
+
readonly margin: 64;
|
|
72
|
+
/** The mascot's maximum height. */
|
|
73
|
+
readonly mascot: 430;
|
|
74
|
+
/** The signature's fin. */
|
|
75
|
+
readonly signatureFin: 34;
|
|
73
76
|
/**
|
|
74
|
-
*
|
|
77
|
+
* The gap the column leaves when the pose goes on the left (course).
|
|
75
78
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
+
* It is 560 and not 420 because a full pose at 430 tall measures ~534 wide:
|
|
80
|
+
* with the exact gap, the shark ate into the headline. The reserve is measured
|
|
81
|
+
* by the pose's real width, not by the margin.
|
|
79
82
|
*/
|
|
80
|
-
readonly
|
|
83
|
+
readonly mascotReserve: 560;
|
|
81
84
|
};
|
|
82
|
-
type
|
|
85
|
+
type BaseData = {
|
|
83
86
|
title: string;
|
|
84
87
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
88
|
+
* Where the PNGs are served from. Satori does not read from disk: in a worker
|
|
89
|
+
* this has to be an absolute URL or a `data:` URI.
|
|
87
90
|
*/
|
|
88
91
|
basePath?: string | undefined;
|
|
89
92
|
};
|
|
90
93
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
94
|
+
* The shared grid. Three of the four templates are this with a different
|
|
95
|
+
* background and a different mascot piece.
|
|
93
96
|
*/
|
|
94
|
-
declare function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
declare function card(options: {
|
|
98
|
+
mode: 'dark' | 'light';
|
|
99
|
+
background: string;
|
|
97
100
|
eyebrow: {
|
|
98
|
-
|
|
101
|
+
text: string;
|
|
99
102
|
color: string;
|
|
100
103
|
};
|
|
101
104
|
title: string;
|
|
102
|
-
/**
|
|
105
|
+
/** A line under the headline, optional. */
|
|
103
106
|
bajada?: string | undefined;
|
|
104
|
-
|
|
107
|
+
signature: string;
|
|
105
108
|
firmaColor: string;
|
|
106
109
|
base: string;
|
|
107
|
-
/**
|
|
108
|
-
|
|
109
|
-
/** `curso`
|
|
110
|
+
/** The right-hand piece, already assembled. */
|
|
111
|
+
mascot?: SatoriNode | null | undefined;
|
|
112
|
+
/** `curso` puts it on the left: it is the only one that inverts the grid. */
|
|
110
113
|
mascotaIzquierda?: boolean | undefined;
|
|
111
114
|
tinta: string;
|
|
112
115
|
tintaSecundaria: string;
|
|
113
|
-
}):
|
|
114
|
-
type
|
|
115
|
-
/**
|
|
116
|
+
}): SatoriNode;
|
|
117
|
+
type ArticleData = BaseData & {
|
|
118
|
+
/** The category slug. It goes in sand, in small caps. */
|
|
116
119
|
category?: string | undefined;
|
|
117
120
|
readingMinutes?: number | undefined;
|
|
118
121
|
/**
|
|
119
|
-
*
|
|
120
|
-
* `hearts`
|
|
122
|
+
* The face, «according to the text's tone». There is no default meant as
|
|
123
|
+
* neutral: `hearts` is the one the manual assigns to the article OG.
|
|
121
124
|
*/
|
|
122
|
-
|
|
125
|
+
expression?: Face | undefined;
|
|
123
126
|
};
|
|
124
|
-
/**
|
|
125
|
-
declare function
|
|
126
|
-
type
|
|
127
|
+
/** Article · 145° gradient over abyss, category and reading time in sand. */
|
|
128
|
+
declare function articleTemplate(data: ArticleData): SatoriNode;
|
|
129
|
+
type CourseData = BaseData & {
|
|
127
130
|
modules?: number | undefined;
|
|
128
131
|
duration?: string | undefined;
|
|
129
|
-
/**
|
|
132
|
+
/** The footer's domain. The courses subdomain by default. */
|
|
130
133
|
url?: string | undefined;
|
|
131
134
|
pose?: Pose | undefined;
|
|
132
135
|
};
|
|
133
136
|
/**
|
|
134
|
-
*
|
|
137
|
+
* Course · THE ONLY LIGHT TEMPLATE.
|
|
135
138
|
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
+
* Full pose on the left — it inverts the grid — eyebrow and URL in dark sand,
|
|
140
|
+
* and therefore the two-blue fin. That last part is not decided here: it follows
|
|
141
|
+
* from the mode being light.
|
|
139
142
|
*/
|
|
140
|
-
declare function
|
|
141
|
-
type
|
|
143
|
+
declare function courseTemplate(data: CourseData): SatoriNode;
|
|
144
|
+
type TalkData = BaseData & {
|
|
142
145
|
event?: string | undefined;
|
|
143
146
|
year?: string | number | undefined;
|
|
144
147
|
location?: string | undefined;
|
|
145
148
|
summary?: string | undefined;
|
|
146
149
|
pose?: Pose | undefined;
|
|
147
150
|
};
|
|
148
|
-
/**
|
|
149
|
-
declare function
|
|
150
|
-
type
|
|
151
|
-
/**
|
|
151
|
+
/** Talk · eyebrow in biolume with the event and year, pose bleeding off the corner. */
|
|
152
|
+
declare function talkTemplate(data: TalkData): SatoriNode;
|
|
153
|
+
type DefaultData = Omit<BaseData, 'title'> & {
|
|
154
|
+
/** The name. The wordmark by default. */
|
|
152
155
|
title?: string | undefined;
|
|
153
156
|
description?: string | undefined;
|
|
154
157
|
};
|
|
155
158
|
/**
|
|
156
|
-
*
|
|
159
|
+
* Default · the document's declared exception.
|
|
157
160
|
*
|
|
158
|
-
*
|
|
159
|
-
* x=290
|
|
160
|
-
*
|
|
161
|
+
* A two-column grid of its own: the fin in biolume at 200 with a halo, a divider
|
|
162
|
+
* at x=290 and Geist 72/700 and 28/400 — NOT the display face. It does not share
|
|
163
|
+
* the shell with the other three because the document says the generator defines
|
|
164
|
+
* it, not the table.
|
|
161
165
|
*/
|
|
162
|
-
declare function
|
|
166
|
+
declare function defaultTemplate(data?: DefaultData): SatoriNode;
|
|
163
167
|
|
|
164
|
-
export { type
|
|
168
|
+
export { type ArticleData, type BaseData, type CourseData, type DefaultData, OG, type SatoriNode, type TalkData, articleTemplate, courseTemplate, defaultTemplate, card as plantillaBase, talkTemplate };
|