@arraypress/covers 1.6.1 → 1.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 CHANGED
@@ -5,6 +5,12 @@ All notable changes to `@arraypress/covers` are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.7.0] — 2026-11-07
9
+
10
+ ### Added
11
+
12
+ - **`terminal-poster`**, on the 400-wide grid (4:5, 1:1, 9:16 and A-series portrait): a terminal / crypto launch poster in acid lime (`#c8ff00`, any `ink`) on black (`ground`), set like a HUD readout. A lime bar across the top with the terminal line, a small nested-square icon and a seeded code (`480-A<3.56.7.128>`); `INIT` in outline type; a small mono log under it (`CORE REVIEW [START]`, `CORE 1`–`CORE 6 …… OK` in three columns with dot leaders, `CORES STABLE`, `RESULTS [PRNTD]`); a big lime panel with chamfered corners, a tab and a notch along its top and foot, holding the mark large in the ground colour (or, with `pixel: true`, rastered into square cells through `@logomarks/core`'s `pixelCells`, `cells` across), tiny serials mirrored in two corners and a 3 × 3 dot grid; a row of HUD glyphs (a barcode, a crosshair, an ×, a square target, two seeded two-digit numbers); the `headline` (`Launch`) huge in a lime panel, fitted to its width and stretched taller on tall canvases; a notched footer with the name and a sign-off; short ticks down both margins. Options `name`, `headline`, `ink`, `ground`, `pixel`, `cells`, and the meta strings `init`, `terminal`, `code`, `serial`, `log` (`[start, stable, results]`), `core`, `status`, `signoff`. The display face is `font` (`Rubik Mono One` by default, OFL, not bundled: register it, or Inter stands in), the small type `mono` (`Space Mono`). The code, serial and numbers follow the seed.
13
+
8
14
  ## [1.6.1] — 2026-11-06
9
15
 
10
16
  ### Added
package/README.md CHANGED
@@ -36,7 +36,7 @@ await writeFile('public/covers/introducing-covers.webp', webp);
36
36
  - [API](https://github.com/arraypress/covers/blob/main/docs/api.md): every export and cover option
37
37
  - [Layers](https://github.com/arraypress/covers/blob/main/docs/layers.md): mesh, grain, text, diagrams, riso inks, dithers, poster type and more
38
38
  - [Effects](https://github.com/arraypress/covers/blob/main/docs/effects.md): filters and pixel effects on any layer, masks, paints
39
- - [Recipes](https://github.com/arraypress/covers/blob/main/docs/recipes.md): seventeen built-ins, 91 flyers and release covers, your own
39
+ - [Recipes](https://github.com/arraypress/covers/blob/main/docs/recipes.md): seventeen built-ins, 92 flyers and release covers, your own
40
40
  - [JSON recipes](https://github.com/arraypress/covers/blob/main/docs/json-recipes.md): a cover style as data, with no JavaScript
41
41
  - [Palettes](https://github.com/arraypress/covers/blob/main/docs/palettes.md): presets, one accent, a theme's tokens
42
42
  - [Formats, print and brand kits](https://github.com/arraypress/covers/blob/main/docs/formats.md): social sizes with safe zones, print with bleed, `kit`, `lint`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arraypress/covers",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "description": "Covers, flyers, posters, release art, social formats and print stationery from one seed and a stack of layers: mesh gradients, grain, riso inks and halftones, knockout and justified type, torn paper, barcodes, safe zones and bleed, as SVG or WebP/PNG/AVIF/JPEG. Recipes are JSON. Runs in Node, browsers and Cloudflare Workers.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -0,0 +1,188 @@
1
+ {
2
+ "$schema": "../../schema/recipe.schema.json",
3
+ "name": "terminal-poster",
4
+ "description": "Terminal launch poster: acid lime (any ink) on black, set like a HUD readout. A lime bar across the top with the terminal line, a small nested-square icon and a seeded code (480-A<3.56.7.128>); INIT in outline type; a small mono log under it (CORE REVIEW [START], CORE 1–6 … OK in three columns with dot leaders, CORES STABLE, RESULTS [PRNTD]); a big lime panel with chamfered corners, a tab and a notch along its top and foot, holding the mark large in the ground colour (or, with pixel: true, rastered into square cells, @logomarks/core's pixelCells), tiny serials mirrored in two corners and a 3 × 3 dot grid; a row of HUD glyphs (a barcode, a crosshair, an ×, a square target, two seeded two-digit numbers); the headline huge in a lime panel, fitted to its width; and a notched lime footer with the name. Short ticks run down both margins. The display face is font (Rubik Mono One by default: wide, mono, OFL; register it, or it falls back to Inter); the small type is mono (Space Mono). Drawn on a 400-wide grid as tall as the canvas, so it sets at 4:5, 1:1, 9:16 and A-series portrait alike; the code, serial and numbers follow the seed.",
5
+ "params": { "name": "Kestrel", "headline": "Launch", "init": "Init", "terminal": "Public access terminal", "code": "", "serial": "", "log": ["Core review [start]", "Cores stable", "Results [prntd]"], "core": "Core", "status": "OK", "signoff": "End of line", "pixel": false, "cells": 20, "font": "Rubik Mono One", "mono": "Space Mono", "ink": "#c8ff00", "ground": "#000000" },
6
+ "vars": {
7
+ "h": { "mul": [400, { "div": ["@height", "@width"] }] },
8
+ "tall": { "min": [1.45, { "max": [0.9, { "div": ["$h", 500] }] }] },
9
+ "pt": 131,
10
+ "fb": { "sub": ["$h", 10] },
11
+ "ft": { "sub": ["$h", 24] },
12
+ "hb": { "sub": ["$h", 32] },
13
+ "ht": { "sub": [{ "sub": ["$h", 32] }, { "mul": [66, "$tall"] }] },
14
+ "gy": { "sub": ["$ht", 30] },
15
+ "pb": { "sub": ["$ht", 42] },
16
+ "c1": { "int": [100, 999] },
17
+ "c2": { "pick": ["A", "B", "C", "D", "E", "F", "H", "K", "M", "R", "X"] },
18
+ "c3": { "int": [1, 9] },
19
+ "c4": { "int": [10, 99] },
20
+ "c5": { "int": [1, 9] },
21
+ "c6": { "int": [100, 255] },
22
+ "s1": { "int": [1000, 9999] },
23
+ "s2": { "pick": ["A", "C", "K", "R", "T", "X", "Z"] },
24
+ "s3": { "int": [10, 99] },
25
+ "s4": { "int": [10, 99] },
26
+ "v1": { "int": [1, 9] },
27
+ "v2": { "int": [10, 99] },
28
+ "n1": { "int": [10, 99] },
29
+ "n2": { "int": [10, 99] }
30
+ },
31
+ "layers": [
32
+ { "id": "ground", "type": "solid", "color": "{ground}" },
33
+ {
34
+ "id": "poster",
35
+ "type": "group",
36
+ "viewBox": [0, 0, 400, "$h"],
37
+ "fit": "contain",
38
+ "layers": [
39
+ { "id": "ticks", "type": "repeat", "count": { "floor": { "div": [{ "sub": ["$h", 28] }, 6] } }, "x": 0, "y": 14, "step": [0, 6], "layer": { "type": "shape", "items": [{ "kind": "line", "x1": 5, "y1": 0, "x2": "{#i % 5 ? 8 : 10}", "y2": 0 }, { "kind": "line", "x1": 395, "y1": 0, "x2": "{#i % 5 ? 392 : 390}", "y2": 0 }], "stroke": "{ink}", "strokeWidth": 0.6, "opacity": 0.7 } },
40
+ { "id": "band", "type": "shape", "kind": "polygon", "points": [[16, 14], [384, 14], [384, 26], [378, 32], [16, 32]], "fill": "{ink}" },
41
+ { "id": "icon", "type": "shape", "items": [{ "kind": "rect", "x": 21.5, "y": 17.5, "width": 11, "height": 11, "fill": "none", "stroke": "{ground}", "strokeWidth": 1 }, { "kind": "rect", "x": 24.5, "y": 20.5, "width": 5, "height": 5, "fill": "{ground}" }], "fill": "{ground}" },
42
+ { "id": "terminal", "type": "text", "content": "{terminal}", "font": "{mono}", "weight": 700, "size": 7.5, "letterSpacing": 0.02, "x": 38, "y": 26, "maxWidth": 200, "maxLines": 1, "color": "{ground}", "transform": "uppercase" },
43
+ { "id": "code", "type": "text", "content": { "if": "code", "then": "{code}", "else": { "join": [["$c1", "-", "$c2", "<", "$c3", ".", "$c4", ".", "$c5", ".", "$c6", ">"], ""] } }, "font": "{mono}", "weight": 700, "size": 7.5, "letterSpacing": 0.02, "x": 376, "y": 26, "maxWidth": 130, "maxLines": 1, "color": "{ground}", "align": "right" },
44
+ { "id": "init", "type": "text", "content": "{init}", "when": "init", "transform": "uppercase", "font": "{font}", "weight": 700, "size": 34, "letterSpacing": 0.04, "x": 15, "y": 72, "maxWidth": 200, "maxLines": 1, "fill": "none", "stroke": "{ink}", "strokeWidth": 0.8, "color": "{ink}" },
45
+ { "id": "boot", "type": "text", "content": { "join": [["SYS", "$v1", ".", "$v2", " // ", "{name}"], ""] }, "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 384, "y": 52, "maxWidth": 170, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase", "opacity": 0.75 },
46
+ { "id": "rule", "type": "shape", "kind": "line", "x1": 214, "y1": 61, "x2": 384, "y2": 61, "stroke": "{ink}", "strokeWidth": 0.6, "dash": [1.2, 1.6] },
47
+ { "id": "mode", "type": "text", "content": { "join": [["RUN ", "$n1", "/", "$n2", " ▶"], ""] }, "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 384, "y": 72, "maxWidth": 170, "maxLines": 1, "color": "{ink}", "align": "right", "opacity": 0.75 },
48
+ { "id": "start", "type": "text", "content": "{log.0}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 16, "y": 88, "maxWidth": 170, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
49
+ { "id": "core1", "type": "text", "content": "{core} 1", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 16, "y": 99, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
50
+ { "id": "ok1", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 134, "y": 99, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
51
+ { "id": "core2", "type": "text", "content": "{core} 2", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 141, "y": 99, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
52
+ { "id": "ok2", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 259, "y": 99, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
53
+ { "id": "core3", "type": "text", "content": "{core} 3", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 266, "y": 99, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
54
+ { "id": "ok3", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 384, "y": 99, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
55
+ { "id": "core4", "type": "text", "content": "{core} 4", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 16, "y": 108, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
56
+ { "id": "ok4", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 134, "y": 108, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
57
+ { "id": "core5", "type": "text", "content": "{core} 5", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 141, "y": 108, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
58
+ { "id": "ok5", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 259, "y": 108, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
59
+ { "id": "core6", "type": "text", "content": "{core} 6", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 266, "y": 108, "maxWidth": 70, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
60
+ { "id": "ok6", "type": "text", "content": "{status}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 384, "y": 108, "maxWidth": 40, "maxLines": 1, "color": "{ink}", "align": "right", "transform": "uppercase" },
61
+ {
62
+ "id": "leaders",
63
+ "type": "shape",
64
+ "items": [
65
+ { "kind": "line", "x1": "{layout.core1.right + 3}", "y1": 98.6, "x2": "{layout.ok1.left - 3}", "y2": 98.6 },
66
+ { "kind": "line", "x1": "{layout.core2.right + 3}", "y1": 98.6, "x2": "{layout.ok2.left - 3}", "y2": 98.6 },
67
+ { "kind": "line", "x1": "{layout.core3.right + 3}", "y1": 98.6, "x2": "{layout.ok3.left - 3}", "y2": 98.6 },
68
+ { "kind": "line", "x1": "{layout.core4.right + 3}", "y1": 107.6, "x2": "{layout.ok4.left - 3}", "y2": 107.6 },
69
+ { "kind": "line", "x1": "{layout.core5.right + 3}", "y1": 107.6, "x2": "{layout.ok5.left - 3}", "y2": 107.6 },
70
+ { "kind": "line", "x1": "{layout.core6.right + 3}", "y1": 107.6, "x2": "{layout.ok6.left - 3}", "y2": 107.6 }
71
+ ],
72
+ "stroke": "{ink}",
73
+ "strokeWidth": 0.9,
74
+ "dash": [0.9, 1.5]
75
+ },
76
+ { "id": "stable", "type": "text", "content": "{log.1}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 16, "y": 119, "maxWidth": 170, "maxLines": 1, "color": "{ink}", "transform": "uppercase" },
77
+ { "id": "results", "type": "text", "content": "{log.2}", "font": "{mono}", "weight": 700, "size": 6, "letterSpacing": 0.02, "x": 384, "y": 119, "maxWidth": 170, "maxLines": 1, "color": "{ink}", "transform": "uppercase", "align": "right" },
78
+ {
79
+ "id": "panel",
80
+ "type": "shape",
81
+ "kind": "polygon",
82
+ "points": [
83
+ [16, { "add": ["$pt", 8] }],
84
+ [24, "$pt"],
85
+ [60, "$pt"],
86
+ [65, { "add": ["$pt", -5] }],
87
+ [136, { "add": ["$pt", -5] }],
88
+ [141, "$pt"],
89
+ [250, "$pt"],
90
+ [255, { "add": ["$pt", 5] }],
91
+ [300, { "add": ["$pt", 5] }],
92
+ [305, "$pt"],
93
+ [384, "$pt"],
94
+ [384, { "add": ["$pb", -8] }],
95
+ [376, "$pb"],
96
+ [340, "$pb"],
97
+ [335, { "add": ["$pb", 5] }],
98
+ [264, { "add": ["$pb", 5] }],
99
+ [259, "$pb"],
100
+ [150, "$pb"],
101
+ [145, { "add": ["$pb", -5] }],
102
+ [100, { "add": ["$pb", -5] }],
103
+ [95, "$pb"],
104
+ [16, "$pb"]
105
+ ],
106
+ "fill": "{ink}"
107
+ },
108
+ { "id": "mark", "type": "outline", "when": { "all": ["mark", { "not": "pixel" }] }, "markup": "{mark}", "lines": 0, "x": 40, "y": { "add": ["$pt", 22] }, "width": 320, "height": { "sub": [{ "sub": ["$pb", "$pt"] }, 44] }, "color": "{ground}" },
109
+ { "id": "pixels", "type": "mosaic", "when": { "all": ["mark", "pixel"] }, "markup": "{mark}", "x": 40, "y": { "add": ["$pt", 22] }, "width": 320, "height": { "sub": [{ "sub": ["$pb", "$pt"] }, 44] }, "cells": "{cells}", "drop": 0, "gap": 0.08, "color": "{ground}" },
110
+ { "id": "serial", "type": "text", "content": { "if": "serial", "then": "{serial}", "else": { "join": [["SN.", "$s1", "-", "$s2", "$s3", " / LOT ", "$s4"], ""] } }, "font": "{mono}", "weight": 700, "size": 5, "letterSpacing": 0.02, "x": 26, "y": { "add": ["$pt", 15] }, "maxWidth": 120, "maxLines": 1, "color": "{ground}" },
111
+ {
112
+ "id": "mirror",
113
+ "type": "group",
114
+ "transform": { "rotate": 180, "origin": [374, { "sub": ["$pb", 15] }] },
115
+ "layers": [{ "id": "serialMirror", "type": "text", "content": { "if": "serial", "then": "{serial}", "else": { "join": [["SN.", "$s1", "-", "$s2", "$s3", " / LOT ", "$s4"], ""] } }, "font": "{mono}", "weight": 700, "size": 5, "letterSpacing": 0.02, "x": 374, "y": { "sub": ["$pb", 15] }, "maxWidth": 120, "maxLines": 1, "color": "{ground}" }]
116
+ },
117
+ {
118
+ "id": "dots",
119
+ "type": "shape",
120
+ "fill": "{ground}",
121
+ "items": [
122
+ { "kind": "circle", "cx": 362, "cy": { "add": ["$pt", 10] }, "r": 1.1 },
123
+ { "kind": "circle", "cx": 368, "cy": { "add": ["$pt", 10] }, "r": 1.1 },
124
+ { "kind": "circle", "cx": 374, "cy": { "add": ["$pt", 10] }, "r": 1.1 },
125
+ { "kind": "circle", "cx": 362, "cy": { "add": ["$pt", 16] }, "r": 1.1 },
126
+ { "kind": "circle", "cx": 368, "cy": { "add": ["$pt", 16] }, "r": 1.1 },
127
+ { "kind": "circle", "cx": 374, "cy": { "add": ["$pt", 16] }, "r": 1.1 },
128
+ { "kind": "circle", "cx": 362, "cy": { "add": ["$pt", 22] }, "r": 1.1 },
129
+ { "kind": "circle", "cx": 368, "cy": { "add": ["$pt", 22] }, "r": 1.1 },
130
+ { "kind": "circle", "cx": 374, "cy": { "add": ["$pt", 22] }, "r": 1.1 }
131
+ ]
132
+ },
133
+ { "id": "barcode", "type": "barcode", "kind": "seeded", "x": 16, "y": "$gy", "width": 76, "height": 18, "color": "{ink}" },
134
+ {
135
+ "id": "glyphs",
136
+ "type": "shape",
137
+ "stroke": "{ink}",
138
+ "strokeWidth": 1,
139
+ "fill": "none",
140
+ "items": [
141
+ { "kind": "circle", "cx": 116, "cy": { "add": ["$gy", 9] }, "r": 6 },
142
+ { "kind": "line", "x1": 106, "y1": { "add": ["$gy", 9] }, "x2": 126, "y2": { "add": ["$gy", 9] } },
143
+ { "kind": "line", "x1": 116, "y1": { "add": ["$gy", -1] }, "x2": 116, "y2": { "add": ["$gy", 19] } },
144
+ { "kind": "line", "x1": 140, "y1": { "add": ["$gy", 3] }, "x2": 152, "y2": { "add": ["$gy", 15] } },
145
+ { "kind": "line", "x1": 152, "y1": { "add": ["$gy", 3] }, "x2": 140, "y2": { "add": ["$gy", 15] } },
146
+ { "kind": "rect", "x": 166.5, "y": { "add": ["$gy", 2.5] }, "width": 13, "height": 13 },
147
+ { "kind": "rect", "x": 171, "y": { "add": ["$gy", 7] }, "width": 4, "height": 4, "fill": "{ink}", "stroke": "none" }
148
+ ]
149
+ },
150
+ { "id": "readout", "type": "text", "content": [{ "join": [["X ", "$c4", ".", "$c6"], ""] }, { "join": [["Y ", "$s3", ".", "$c1"], ""] }], "font": "{mono}", "weight": 700, "size": 5.5, "letterSpacing": 0.02, "x": 196, "y": { "add": ["$gy", 7.5] }, "maxWidth": 60, "maxLines": 2, "color": "{ink}", "lineHeight": 1.45, "opacity": 0.75 },
151
+ { "id": "n1", "type": "text", "content": "$n1", "font": "{font}", "weight": 700, "size": 15, "letterSpacing": 0, "x": 330, "y": { "add": ["$gy", 16.5] }, "align": "right", "maxWidth": 60, "maxLines": 1, "color": "{ink}" },
152
+ { "id": "slash", "type": "shape", "kind": "line", "x1": 340, "y1": { "add": ["$gy", 17] }, "x2": 348, "y2": { "add": ["$gy", 1] }, "stroke": "{ink}", "strokeWidth": 1 },
153
+ { "id": "n2", "type": "text", "content": "$n2", "font": "{font}", "weight": 700, "size": 15, "letterSpacing": 0, "x": 384, "y": { "add": ["$gy", 16.5] }, "align": "right", "maxWidth": 60, "maxLines": 1, "color": "{ink}" },
154
+ { "id": "headPanel", "type": "shape", "kind": "polygon", "points": [[16, "$ht"], [22, "$ht"], [26, { "add": ["$ht", -4] }], [84, { "add": ["$ht", -4] }], [88, "$ht"], [372, "$ht"], [384, { "add": ["$ht", 12] }], [384, "$hb"], [16, "$hb"]], "fill": "{ink}" },
155
+ {
156
+ "id": "stretch",
157
+ "type": "group",
158
+ "transform": { "scale": [1, "$tall"], "origin": [200, { "div": [{ "add": ["$ht", "$hb"] }, 2] }] },
159
+ "layers": [
160
+ {
161
+ "id": "headline",
162
+ "type": "text",
163
+ "content": "{headline}",
164
+ "when": "headline",
165
+ "transform": "uppercase",
166
+ "font": "{font}",
167
+ "weight": 800,
168
+ "size": 80,
169
+ "lineHeight": 1,
170
+ "letterSpacing": -0.01,
171
+ "fit": "width",
172
+ "maxWidth": 352,
173
+ "maxHeight": { "div": [{ "sub": [{ "sub": ["$hb", "$ht"] }, 18] }, "$tall"] },
174
+ "maxLines": 1,
175
+ "anchor": "center",
176
+ "margin": 0,
177
+ "offset": { "x": 0, "y": { "sub": [{ "div": [{ "add": ["$ht", "$hb"] }, 2] }, { "div": ["$h", 2] }] } },
178
+ "color": "{ground}"
179
+ }
180
+ ]
181
+ },
182
+ { "id": "footer", "type": "shape", "kind": "polygon", "points": [[16, "$ft"], [206, "$ft"], [211, { "add": ["$ft", 4] }], [252, { "add": ["$ft", 4] }], [257, "$ft"], [300, "$ft"], [306, { "add": ["$ft", 6] }], [384, { "add": ["$ft", 6] }], [384, "$fb"], [16, "$fb"]], "fill": "{ink}" },
183
+ { "id": "name", "type": "text", "content": "{name}", "font": "{mono}", "weight": 700, "size": 7, "letterSpacing": 0.02, "x": 22, "y": { "sub": ["$h", 14] }, "maxWidth": 180, "maxLines": 1, "color": "{ground}", "transform": "uppercase", "when": "name" },
184
+ { "id": "signoff", "type": "text", "content": "{signoff}", "font": "{mono}", "weight": 700, "size": 5.5, "letterSpacing": 0.02, "x": 378, "y": { "sub": ["$h", 12] }, "maxWidth": 76, "maxLines": 1, "color": "{ground}", "transform": "uppercase", "align": "right", "when": "signoff" }
185
+ ]
186
+ }
187
+ ]
188
+ }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // Generated by scripts/generate.mjs from package.json. Do not edit.
2
2
 
3
3
  /** The package version, part of every cache key. */
4
- export const VERSION = '1.6.1';
4
+ export const VERSION = '1.7.0';