@arraypress/covers 1.0.0 → 1.3.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 +118 -0
- package/README.md +18 -524
- package/package.json +34 -5
- package/recipes/brand.json +1143 -0
- package/recipes/flyers/afterglow-motion.json +540 -0
- package/recipes/flyers/afterglow.json +70 -0
- package/recipes/flyers/arcfield-mirror-motion.json +397 -0
- package/recipes/flyers/arcfield-mirror.json +364 -0
- package/recipes/flyers/bauhaus-oktav.json +319 -0
- package/recipes/flyers/bauhaus-ritmo.json +735 -0
- package/recipes/flyers/bauhaus-volta.json +394 -0
- package/recipes/flyers/bloomfall.json +99 -0
- package/recipes/flyers/drag-solenne-motion.json +444 -0
- package/recipes/flyers/drag-solenne.json +426 -0
- package/recipes/flyers/fennick-patches.json +874 -0
- package/recipes/flyers/ferro-pass.json +398 -0
- package/recipes/flyers/ferrova.json +812 -0
- package/recipes/flyers/grid-rest-rhythm.json +125 -0
- package/recipes/flyers/groovy-honeycomb.json +816 -0
- package/recipes/flyers/groovy-marigold.json +479 -0
- package/recipes/flyers/groovy-peachfuzz.json +974 -0
- package/recipes/flyers/halden-orbit-motion.json +381 -0
- package/recipes/flyers/halden-orbit.json +356 -0
- package/recipes/flyers/halvard.json +120 -0
- package/recipes/flyers/kairo-weekender.json +696 -0
- package/recipes/flyers/linger-motion.json +518 -0
- package/recipes/flyers/linger.json +67 -0
- package/recipes/flyers/little-orchard.json +105 -0
- package/recipes/flyers/lofi-hexmoth.json +912 -0
- package/recipes/flyers/lofi-lowbit-motion.json +888 -0
- package/recipes/flyers/lofi-lowbit.json +880 -0
- package/recipes/flyers/lofi-nullpoint.json +3013 -0
- package/recipes/flyers/lumio-stack-motion.json +648 -0
- package/recipes/flyers/lumio-stack.json +438 -0
- package/recipes/flyers/magazine-cover.json +168 -0
- package/recipes/flyers/magazine-extended.json +269 -0
- package/recipes/flyers/magazine-knockout.json +40 -0
- package/recipes/flyers/northfold-varsity.json +618 -0
- package/recipes/flyers/open-studio.json +69 -0
- package/recipes/flyers/orrin-merch.json +715 -0
- package/recipes/flyers/oxyde.json +113 -0
- package/recipes/flyers/quiet-fields.json +610 -0
- package/recipes/flyers/scrapbook-halcyon.json +948 -0
- package/recipes/flyers/solenne-ticket.json +730 -0
- package/recipes/flyers/solvane-motion.json +576 -0
- package/recipes/flyers/solvane.json +98 -0
- package/recipes/flyers/subduct.json +99 -0
- package/recipes/flyers/sunvale-lineup.json +584 -0
- package/recipes/flyers/tidewell.json +91 -0
- package/recipes/flyers/tour-kairo.json +535 -0
- package/recipes/flyers/velora-stickers.json +885 -0
- package/recipes/flyers/wheatpaste-black.json +313 -0
- package/recipes/flyers/wheatpaste-mark.json +198 -0
- package/recipes/flyers/wheatpaste-torn.json +114 -0
- package/recipes/flyers/wheatpaste-wall.json +984 -0
- package/recipes/flyers/wheatpaste-words.json +233 -0
- package/recipes/release/aura.json +137 -0
- package/recipes/release/chrome.json +433 -0
- package/recipes/release/collage.json +372 -0
- package/recipes/release/duotone.json +113 -0
- package/recipes/release/film-still.json +102 -0
- package/recipes/release/headline.json +70 -0
- package/recipes/release/instant.json +170 -0
- package/recipes/release/label.json +364 -0
- package/recipes/release/liquid-glass.json +301 -0
- package/recipes/release/odd-tile-dark.json +688 -0
- package/recipes/release/odd-tile-dense.json +1056 -0
- package/recipes/release/odd-tile-shift.json +541 -0
- package/recipes/release/odd-tile-split.json +571 -0
- package/recipes/release/odd-tile.json +633 -0
- package/recipes/release/off-edge.json +96 -0
- package/recipes/release/plinth.json +794 -0
- package/recipes/release/riso.json +108 -0
- package/recipes/release/series/fluid-label.json +561 -0
- package/recipes/release/series/fluid-pixel.json +334 -0
- package/recipes/release/series/hairline.json +305 -0
- package/recipes/release/series/halo.json +282 -0
- package/recipes/release/series/mark-crop.json +135 -0
- package/recipes/release/series/mark-window.json +150 -0
- package/recipes/release/series/photo-label.json +475 -0
- package/recipes/release/series/smear-field.json +345 -0
- package/recipes/release/series/smear.json +202 -0
- package/recipes/release/series/spin.json +172 -0
- package/recipes/release/series/split-ghost.json +230 -0
- package/recipes/release/series/zoom.json +168 -0
- package/recipes/release/small-print.json +114 -0
- package/recipes/release/stack.json +156 -0
- package/recipes/release/swiss.json +117 -0
- package/schema/recipe.schema.json +7624 -827
- package/src/animate/index.d.ts +9 -0
- package/src/animate/index.js +11 -0
- package/src/animate/keyframes.d.ts +21 -0
- package/src/animate/keyframes.js +119 -0
- package/src/animate/marquee.d.ts +30 -0
- package/src/animate/marquee.js +93 -0
- package/src/animate/morph.d.ts +8 -0
- package/src/animate/morph.js +99 -0
- package/src/animate/motion.d.ts +59 -0
- package/src/animate/motion.js +63 -0
- package/src/animate/sheet.d.ts +19 -0
- package/src/animate/sheet.js +61 -0
- package/src/animate/timing.d.ts +28 -0
- package/src/animate/timing.js +146 -0
- package/src/animate/tracks.d.ts +18 -0
- package/src/animate/tracks.js +139 -0
- package/src/builtins.js +4 -0
- package/src/diagram.js +4 -3
- package/src/extract.js +6 -5
- package/src/fonts.d.ts +55 -0
- package/src/fonts.js +245 -53
- package/src/formats/cut.d.ts +10 -0
- package/src/formats/cut.js +77 -0
- package/src/formats/index.d.ts +6 -0
- package/src/formats/index.js +9 -0
- package/src/formats/presets.d.ts +41 -0
- package/src/formats/presets.js +89 -0
- package/src/formats/print.d.ts +25 -0
- package/src/formats/print.js +117 -0
- package/src/formats/zones.d.ts +10 -0
- package/src/formats/zones.js +64 -0
- package/src/geometry.js +5 -35
- package/src/grid.js +1 -1
- package/src/handmade.js +9 -7
- package/src/icons.js +42 -9
- package/src/index.d.ts +232 -55
- package/src/index.js +14 -6
- package/src/inter-data.js +27 -0
- package/src/json-recipe.js +201 -27
- package/src/kit/index.d.ts +20 -0
- package/src/kit/index.js +58 -0
- package/src/layer-options.js +43 -4
- package/src/layers/barcode.d.ts +19 -0
- package/src/layers/barcode.js +63 -0
- package/src/layers/code128.d.ts +4 -0
- package/src/layers/code128.js +28 -0
- package/src/layers/expr.d.ts +6 -0
- package/src/layers/expr.js +121 -0
- package/src/layers/geometry.d.ts +6 -0
- package/src/layers/geometry.js +238 -0
- package/src/layers/index.d.ts +18 -0
- package/src/layers/index.js +15 -0
- package/src/layers/perforation.d.ts +14 -0
- package/src/layers/perforation.js +47 -0
- package/src/layers/repeat.d.ts +29 -0
- package/src/layers/repeat.js +90 -0
- package/src/layers/shape.d.ts +46 -0
- package/src/layers/shape.js +115 -0
- package/src/layers/soft.d.ts +5 -0
- package/src/layers/soft.js +43 -0
- package/src/layers/svg.d.ts +23 -0
- package/src/layers/svg.js +108 -0
- package/src/layers/table.d.ts +25 -0
- package/src/layers/table.js +80 -0
- package/src/layers/tear.d.ts +21 -0
- package/src/layers/tear.js +74 -0
- package/src/layers/texture.d.ts +17 -0
- package/src/layers/texture.js +106 -0
- package/src/layers/util.d.ts +8 -0
- package/src/layers/util.js +61 -0
- package/src/layers.js +129 -61
- package/src/lint/image-size.d.ts +4 -0
- package/src/lint/image-size.js +34 -0
- package/src/lint/index.d.ts +16 -0
- package/src/lint/index.js +127 -0
- package/src/lint/rules.d.ts +5 -0
- package/src/lint/rules.js +19 -0
- package/src/node.d.ts +2 -0
- package/src/node.js +20 -0
- package/src/paint/index.d.ts +49 -0
- package/src/paint/index.js +66 -0
- package/src/paint/presets.d.ts +10 -0
- package/src/paint/presets.js +47 -0
- package/src/paint/tile.d.ts +7 -0
- package/src/paint/tile.js +55 -0
- package/src/palette.js +1 -1
- package/src/platform/files.d.ts +6 -0
- package/src/platform/files.js +41 -0
- package/src/platform/harfbuzz.d.ts +9 -0
- package/src/platform/harfbuzz.js +80 -0
- package/src/platform/index.d.ts +8 -0
- package/src/platform/index.js +15 -0
- package/src/platform/load.d.ts +6 -0
- package/src/platform/load.js +71 -0
- package/src/platform/no-harfbuzz.d.ts +2 -0
- package/src/platform/no-harfbuzz.js +11 -0
- package/src/platform/settings.d.ts +28 -0
- package/src/platform/settings.js +51 -0
- package/src/print.js +16 -13
- package/src/recipes.js +5 -4
- package/src/render/backdrop.d.ts +6 -0
- package/src/render/backdrop.js +55 -0
- package/src/render/context.d.ts +82 -0
- package/src/render/grain.d.ts +7 -0
- package/src/render/grain.js +113 -0
- package/src/render/group.d.ts +23 -0
- package/src/render/group.js +67 -0
- package/src/render/key.d.ts +5 -0
- package/src/render/key.js +90 -0
- package/src/render/report.d.ts +5 -0
- package/src/render/report.js +19 -0
- package/src/render/transform.d.ts +36 -0
- package/src/render/transform.js +139 -0
- package/src/render/use.d.ts +27 -0
- package/src/render/use.js +73 -0
- package/src/render/wrap.d.ts +14 -0
- package/src/render/wrap.js +144 -0
- package/src/render.js +343 -215
- package/src/text.d.ts +29 -0
- package/src/text.js +23 -16
- package/src/type/auto-color.d.ts +9 -0
- package/src/type/auto-color.js +44 -0
- package/src/type/fallback.d.ts +11 -0
- package/src/type/fallback.js +92 -0
- package/src/type/glyphs.d.ts +24 -0
- package/src/type/glyphs.js +87 -0
- package/src/type/index.d.ts +5 -0
- package/src/type/index.js +10 -0
- package/src/type/kern.d.ts +4 -0
- package/src/type/kern.js +144 -0
- package/src/type/layout-ref.d.ts +10 -0
- package/src/type/layout-ref.js +74 -0
- package/src/type/line.d.ts +11 -0
- package/src/type/line.js +105 -0
- package/src/type/live.d.ts +6 -0
- package/src/type/live.js +39 -0
- package/src/type/name.d.ts +4 -0
- package/src/type/name.js +32 -0
- package/src/type/path.d.ts +18 -0
- package/src/type/path.js +89 -0
- package/src/type/pixel.d.ts +7 -0
- package/src/type/pixel.js +85 -0
- package/src/type/sfnt.d.ts +20 -0
- package/src/type/sfnt.js +258 -0
- package/src/type/spans.d.ts +33 -0
- package/src/type/spans.js +138 -0
- package/src/type/symbols.d.ts +7 -0
- package/src/type/symbols.js +89 -0
- package/src/type/typeset.d.ts +10 -0
- package/src/type/typeset.js +363 -0
- package/src/type/woff2.d.ts +6 -0
- package/src/type/woff2.js +301 -0
- package/src/version.js +4 -0
- package/src/color.js +0 -246
- package/src/png.js +0 -77
- package/src/rng.js +0 -95
- package/src/svg.js +0 -69
package/src/rng.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Seeded randomness.
|
|
3
|
-
*
|
|
4
|
-
* Every random choice a cover makes comes from a generator seeded by the
|
|
5
|
-
* cover's `seed` string, so the same input always draws the same image and
|
|
6
|
-
* two posts with different slugs draw different ones. Each layer gets its
|
|
7
|
-
* own stream (seed + layer index + layer type), so adding or removing one
|
|
8
|
-
* layer never reshuffles the others.
|
|
9
|
-
*
|
|
10
|
-
* @module rng
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Hash a string to a 32-bit unsigned integer (cyrb53, folded to 32 bits).
|
|
15
|
-
* Fast, well distributed, and stable across platforms and Node versions.
|
|
16
|
-
*
|
|
17
|
-
* @param {string} str - Any string.
|
|
18
|
-
* @param {number} [salt=0] - Optional salt, to get several independent hashes of one string.
|
|
19
|
-
* @returns {number} An integer in `[0, 2^32)`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* hashString('my-post'); // 1838215339 (always)
|
|
23
|
-
*/
|
|
24
|
-
export function hashString(str, salt = 0) {
|
|
25
|
-
let h1 = 0xdeadbeef ^ salt;
|
|
26
|
-
let h2 = 0x41c6ce57 ^ salt;
|
|
27
|
-
for (let i = 0; i < str.length; i++) {
|
|
28
|
-
const ch = str.charCodeAt(i);
|
|
29
|
-
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
30
|
-
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
31
|
-
}
|
|
32
|
-
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
|
|
33
|
-
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
|
34
|
-
return (h1 ^ h2) >>> 0;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* A small seeded pseudo-random generator (sfc32) with helpers.
|
|
39
|
-
*
|
|
40
|
-
* @typedef {object} Rng
|
|
41
|
-
* @property {() => number} next - A float in `[0, 1)`.
|
|
42
|
-
* @property {(min: number, max: number) => number} range - A float in `[min, max)`.
|
|
43
|
-
* @property {(min: number, max: number) => number} int - An integer in `[min, max]`.
|
|
44
|
-
* @property {<T>(items: readonly T[]) => T} pick - One item.
|
|
45
|
-
* @property {<T>(items: readonly T[]) => T[]} shuffle - A shuffled copy.
|
|
46
|
-
* @property {(chance?: number) => boolean} chance - `true` with the given probability (default 0.5).
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Create a seeded generator. Strings are hashed; numbers are used as-is.
|
|
51
|
-
*
|
|
52
|
-
* @param {string | number} seed - The seed.
|
|
53
|
-
* @returns {Rng} The generator.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* const rng = createRng('my-post');
|
|
57
|
-
* rng.range(0, 360); // same angle every run
|
|
58
|
-
*/
|
|
59
|
-
export function createRng(seed) {
|
|
60
|
-
const s = String(seed);
|
|
61
|
-
let a = hashString(s, 1);
|
|
62
|
-
let b = hashString(s, 2);
|
|
63
|
-
let c = hashString(s, 3);
|
|
64
|
-
let d = hashString(s, 4);
|
|
65
|
-
|
|
66
|
-
const next = () => {
|
|
67
|
-
a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0;
|
|
68
|
-
let t = (a + b) | 0;
|
|
69
|
-
a = b ^ (b >>> 9);
|
|
70
|
-
b = (c + (c << 3)) | 0;
|
|
71
|
-
c = (c << 21) | (c >>> 11);
|
|
72
|
-
d = (d + 1) | 0;
|
|
73
|
-
t = (t + d) | 0;
|
|
74
|
-
c = (c + t) | 0;
|
|
75
|
-
return (t >>> 0) / 4294967296;
|
|
76
|
-
};
|
|
77
|
-
// Warm up: the first few sfc32 outputs are correlated with the seed.
|
|
78
|
-
for (let i = 0; i < 12; i++) next();
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
next,
|
|
82
|
-
range: (min, max) => min + next() * (max - min),
|
|
83
|
-
int: (min, max) => Math.floor(min + next() * (max - min + 1)),
|
|
84
|
-
pick: (items) => items[Math.floor(next() * items.length)],
|
|
85
|
-
shuffle: (items) => {
|
|
86
|
-
const out = items.slice();
|
|
87
|
-
for (let i = out.length - 1; i > 0; i--) {
|
|
88
|
-
const j = Math.floor(next() * (i + 1));
|
|
89
|
-
[out[i], out[j]] = [out[j], out[i]];
|
|
90
|
-
}
|
|
91
|
-
return out;
|
|
92
|
-
},
|
|
93
|
-
chance: (p = 0.5) => next() < p,
|
|
94
|
-
};
|
|
95
|
-
}
|
package/src/svg.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Small helpers for writing SVG markup deterministically.
|
|
3
|
-
*
|
|
4
|
-
* Numbers are always written through {@link num}, so the same input gives
|
|
5
|
-
* byte-identical output on every machine (no `0.30000000000000004`, no
|
|
6
|
-
* locale formatting, no `-0`).
|
|
7
|
-
*
|
|
8
|
-
* @module svg
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Format a number for SVG: at most `digits` decimals, no trailing zeros.
|
|
13
|
-
*
|
|
14
|
-
* @param {number} v - The number.
|
|
15
|
-
* @param {number} [digits=2] - Maximum decimals.
|
|
16
|
-
* @returns {string} The formatted number.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* num(1 / 3); // '0.33'
|
|
20
|
-
* num(12.5); // '12.5'
|
|
21
|
-
* num(-0.001); // '0'
|
|
22
|
-
*/
|
|
23
|
-
export function num(v, digits = 2) {
|
|
24
|
-
if (!Number.isFinite(v)) return '0';
|
|
25
|
-
const s = v.toFixed(digits).replace(/\.?0+$/, '');
|
|
26
|
-
return s === '-0' || s === '' ? '0' : s;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Escape text for an XML attribute or text node.
|
|
31
|
-
*
|
|
32
|
-
* @param {string} s - Raw text.
|
|
33
|
-
* @returns {string} Escaped text.
|
|
34
|
-
*/
|
|
35
|
-
export function esc(s) {
|
|
36
|
-
return String(s).replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Serialise an attribute object. `undefined`, `null` and `false` values are
|
|
41
|
-
* skipped; numbers go through {@link num}. Keys keep their insertion order.
|
|
42
|
-
*
|
|
43
|
-
* @param {Record<string, string | number | boolean | null | undefined>} obj - Attributes.
|
|
44
|
-
* @returns {string} ` key="value"` pairs (with a leading space), or `''`.
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* attrs({ x: 1.005, fill: '#fff', opacity: undefined }); // ' x="1" fill="#fff"'
|
|
48
|
-
*/
|
|
49
|
-
export function attrs(obj) {
|
|
50
|
-
let out = '';
|
|
51
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
52
|
-
if (v === undefined || v === null || v === false) continue;
|
|
53
|
-
out += ` ${k}="${typeof v === 'number' ? num(v) : esc(String(v))}"`;
|
|
54
|
-
}
|
|
55
|
-
return out;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Opacity and blend-mode attributes shared by every layer.
|
|
60
|
-
*
|
|
61
|
-
* @param {{ opacity?: number, blend?: string }} layer - The layer.
|
|
62
|
-
* @returns {Record<string, string | number | undefined>} Attributes for the layer's group.
|
|
63
|
-
*/
|
|
64
|
-
export function layerAttrs(layer) {
|
|
65
|
-
return {
|
|
66
|
-
opacity: layer.opacity != null && layer.opacity < 1 ? Math.max(0, layer.opacity) : undefined,
|
|
67
|
-
style: layer.blend && layer.blend !== 'normal' ? `mix-blend-mode:${layer.blend}` : undefined,
|
|
68
|
-
};
|
|
69
|
-
}
|