@prosopo/puzzle-assets 0.1.4 → 0.2.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/.turbo/turbo-build$colon$cjs.log +13 -15
- package/.turbo/turbo-build$colon$tsc.log +5 -8
- package/.turbo/turbo-build.log +15 -20
- package/CHANGELOG.md +86 -0
- package/LICENSE +201 -0
- package/dist/browser.d.ts +3 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/cjs/compose.cjs +117 -1
- package/dist/cjs/contrast.cjs +142 -0
- package/dist/cjs/index.cjs +24 -6
- package/dist/cjs/notch.cjs +115 -93
- package/dist/cjs/palette.cjs +36 -3
- package/dist/compose.d.ts +4 -0
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +117 -2
- package/dist/compose.js.map +1 -1
- package/dist/contrast.d.ts +9 -0
- package/dist/contrast.d.ts.map +1 -0
- package/dist/contrast.js +137 -0
- package/dist/contrast.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/notch.d.ts.map +1 -1
- package/dist/notch.js +115 -93
- package/dist/notch.js.map +1 -1
- package/dist/palette.d.ts +1 -0
- package/dist/palette.d.ts.map +1 -1
- package/dist/palette.js +36 -4
- package/dist/palette.js.map +1 -1
- package/dist/prng.d.ts.map +1 -1
- package/dist/prng.js.map +1 -1
- package/dist/tests/pieceReadability.unit.test.d.ts +2 -0
- package/dist/tests/pieceReadability.unit.test.d.ts.map +1 -0
- package/dist/tests/pieceReadability.unit.test.js +320 -0
- package/dist/tests/pieceReadability.unit.test.js.map +1 -0
- package/dist/tests/renderReplay.unit.test.d.ts +2 -0
- package/dist/tests/renderReplay.unit.test.d.ts.map +1 -0
- package/dist/tests/renderReplay.unit.test.js +77 -0
- package/dist/tests/renderReplay.unit.test.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +59 -60
- package/src/background.ts +0 -189
- package/src/browser.ts +0 -100
- package/src/compose.ts +0 -210
- package/src/decoys.ts +0 -191
- package/src/encode.ts +0 -59
- package/src/index.ts +0 -137
- package/src/notch.ts +0 -223
- package/src/palette.ts +0 -110
- package/src/prng.ts +0 -95
- package/src/tests/puzzleAssets.unit.test.ts +0 -438
- package/src/types.ts +0 -93
- package/tsconfig.cjs.json +0 -14
- package/tsconfig.json +0 -19
- package/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.types.json +0 -9
package/dist/compose.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAcA,OAAO,EAAmB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAenE,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,sBAAsB,GAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAQzD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAM5B,MAAM,UAAU,GAAG,CAAC,CAAC;AAOrB,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAQ/B,MAAM,gBAAgB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Rgb } from "./palette.js";
|
|
2
|
+
export type VisionType = "normal" | "protanopia" | "deuteranopia" | "tritanopia";
|
|
3
|
+
export declare const VISION_TYPES: readonly VisionType[];
|
|
4
|
+
export declare const relativeLuminance: (colour: Rgb) => number;
|
|
5
|
+
export declare const contrastRatio: (a: Rgb, b: Rgb) => number;
|
|
6
|
+
export declare const simulateVision: (colour: Rgb, vision: VisionType) => Rgb;
|
|
7
|
+
export declare const worstCaseContrast: (a: Rgb, b: Rgb) => number;
|
|
8
|
+
export declare const bestPairContrast: (colours: readonly Rgb[]) => number;
|
|
9
|
+
//# sourceMappingURL=contrast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrast.d.ts","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAmBxC,MAAM,MAAM,UAAU,GACnB,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,YAAY,CAAC;AAEhB,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAK7C,CAAC;AAqBF,eAAO,MAAM,iBAAiB,WAAY,GAAG,KAAG,MAGpB,CAAC;AAQ7B,eAAO,MAAM,aAAa,MAAO,GAAG,KAAK,GAAG,KAAG,MAM9C,CAAC;AA8CF,eAAO,MAAM,cAAc,WAAY,GAAG,UAAU,UAAU,KAAG,GAahE,CAAC;AASF,eAAO,MAAM,iBAAiB,MAAO,GAAG,KAAK,GAAG,KAAG,MAYlD,CAAC;AAWF,eAAO,MAAM,gBAAgB,YAAa,SAAS,GAAG,EAAE,KAAG,MAc1D,CAAC"}
|
package/dist/contrast.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
//#region src/contrast.ts
|
|
2
|
+
var VISION_TYPES = [
|
|
3
|
+
"normal",
|
|
4
|
+
"protanopia",
|
|
5
|
+
"deuteranopia",
|
|
6
|
+
"tritanopia"
|
|
7
|
+
];
|
|
8
|
+
/** sRGB 8-bit channel to linear light in [0, 1]. */
|
|
9
|
+
var toLinear = (channel) => {
|
|
10
|
+
const c = channel / 255;
|
|
11
|
+
return c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;
|
|
12
|
+
};
|
|
13
|
+
var fromLinear = (value) => {
|
|
14
|
+
const c = value <= .0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - .055;
|
|
15
|
+
return Math.min(255, Math.max(0, Math.round(c * 255)));
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* WCAG relative luminance, in [0, 1].
|
|
19
|
+
*
|
|
20
|
+
* Linearised first: averaging raw sRGB bytes is the usual mistake and it
|
|
21
|
+
* overstates how light a saturated colour is, which would let this pass a pair
|
|
22
|
+
* that a dichromat sees as flat.
|
|
23
|
+
*/
|
|
24
|
+
var relativeLuminance = (colour) => .2126 * toLinear(colour.r) + .7152 * toLinear(colour.g) + .0722 * toLinear(colour.b);
|
|
25
|
+
/**
|
|
26
|
+
* WCAG contrast ratio, in [1, 21].
|
|
27
|
+
*
|
|
28
|
+
* 1 means two colours are the same brightness — indistinguishable without hue —
|
|
29
|
+
* and 21 is black against white.
|
|
30
|
+
*/
|
|
31
|
+
var contrastRatio = (a, b) => {
|
|
32
|
+
const la = relativeLuminance(a);
|
|
33
|
+
const lb = relativeLuminance(b);
|
|
34
|
+
const lighter = Math.max(la, lb);
|
|
35
|
+
const darker = Math.min(la, lb);
|
|
36
|
+
return (lighter + .05) / (darker + .05);
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Brettel/Viénot-style dichromacy simulation, in linear RGB.
|
|
40
|
+
*
|
|
41
|
+
* These are the Viénot–Brettel–Mollon single-plane projections, which is the
|
|
42
|
+
* standard approximation and is more than accurate enough for the question being
|
|
43
|
+
* asked here: not "what exactly does this look like" but "has the difference
|
|
44
|
+
* between these two colours disappeared". The matrices are applied to linear
|
|
45
|
+
* light, not to sRGB bytes — applying them to gamma-encoded values is a common
|
|
46
|
+
* error that makes the result look more distinguishable than it is.
|
|
47
|
+
*/
|
|
48
|
+
var DICHROMACY_MATRICES = {
|
|
49
|
+
protanopia: [
|
|
50
|
+
.15286,
|
|
51
|
+
1.17579,
|
|
52
|
+
-.32865,
|
|
53
|
+
.11475,
|
|
54
|
+
.85426,
|
|
55
|
+
.03099,
|
|
56
|
+
-.00386,
|
|
57
|
+
-.00534,
|
|
58
|
+
1.0092
|
|
59
|
+
],
|
|
60
|
+
deuteranopia: [
|
|
61
|
+
.3677,
|
|
62
|
+
.86122,
|
|
63
|
+
-.22892,
|
|
64
|
+
.28039,
|
|
65
|
+
.67201,
|
|
66
|
+
.0476,
|
|
67
|
+
-.0118,
|
|
68
|
+
.04164,
|
|
69
|
+
.97016
|
|
70
|
+
],
|
|
71
|
+
tritanopia: [
|
|
72
|
+
1.25528,
|
|
73
|
+
-.07657,
|
|
74
|
+
-.17871,
|
|
75
|
+
-.07833,
|
|
76
|
+
.93087,
|
|
77
|
+
.14746,
|
|
78
|
+
.00491,
|
|
79
|
+
.2214,
|
|
80
|
+
.77309
|
|
81
|
+
]
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* What `colour` looks like to someone with `vision`.
|
|
85
|
+
*
|
|
86
|
+
* `normal` is the identity, so callers can loop over [`VISION_TYPES`] without a
|
|
87
|
+
* special case.
|
|
88
|
+
*/
|
|
89
|
+
var simulateVision = (colour, vision) => {
|
|
90
|
+
if (vision === "normal") return colour;
|
|
91
|
+
const m = DICHROMACY_MATRICES[vision];
|
|
92
|
+
const r = toLinear(colour.r);
|
|
93
|
+
const g = toLinear(colour.g);
|
|
94
|
+
const b = toLinear(colour.b);
|
|
95
|
+
return {
|
|
96
|
+
r: fromLinear(m[0] * r + m[1] * g + m[2] * b),
|
|
97
|
+
g: fromLinear(m[3] * r + m[4] * g + m[5] * b),
|
|
98
|
+
b: fromLinear(m[6] * r + m[7] * g + m[8] * b)
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* The lowest contrast ratio between `a` and `b` across normal vision and all
|
|
103
|
+
* three dichromacies.
|
|
104
|
+
*
|
|
105
|
+
* The minimum, not the average: a palette that reads well for most people and
|
|
106
|
+
* collapses for deuteranopes has failed, and averaging would hide exactly that.
|
|
107
|
+
*/
|
|
108
|
+
var worstCaseContrast = (a, b) => {
|
|
109
|
+
let worst = Number.POSITIVE_INFINITY;
|
|
110
|
+
for (const vision of VISION_TYPES) {
|
|
111
|
+
const ratio = contrastRatio(simulateVision(a, vision), simulateVision(b, vision));
|
|
112
|
+
if (ratio < worst) worst = ratio;
|
|
113
|
+
}
|
|
114
|
+
return worst;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* The widest separation any pair in `colours` achieves in the worst case.
|
|
118
|
+
*
|
|
119
|
+
* This is the question a mesh background has to answer: not "is every pair
|
|
120
|
+
* distinguishable" — a gradient needs near-neighbours — but "does the field
|
|
121
|
+
* contain a visible light-to-dark range at all, for everyone". A palette whose
|
|
122
|
+
* best pair is flat is a flat picture, and a piece resting on it has nothing but
|
|
123
|
+
* its own edge treatment to separate it.
|
|
124
|
+
*/
|
|
125
|
+
var bestPairContrast = (colours) => {
|
|
126
|
+
let best = 1;
|
|
127
|
+
for (let i = 0; i < colours.length; i++) for (let j = i + 1; j < colours.length; j++) {
|
|
128
|
+
const a = colours[i];
|
|
129
|
+
const b = colours[j];
|
|
130
|
+
if (a === void 0 || b === void 0) continue;
|
|
131
|
+
const ratio = worstCaseContrast(a, b);
|
|
132
|
+
if (ratio > best) best = ratio;
|
|
133
|
+
}
|
|
134
|
+
return best;
|
|
135
|
+
};
|
|
136
|
+
//#endregion
|
|
137
|
+
export { VISION_TYPES, bestPairContrast, contrastRatio, relativeLuminance, simulateVision, worstCaseContrast };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { NotchPlacement, PuzzleGeometry, PuzzleRenderSettings, RenderedPuzzle, RgbaImage } from "./types.js";
|
|
2
2
|
export { createPrng, createSeed, SEED_BYTES } from "./prng.js";
|
|
3
|
+
export type { Prng } from "./prng.js";
|
|
3
4
|
export { generateBackground } from "./background.js";
|
|
5
|
+
export { bestPairContrast, contrastRatio, relativeLuminance, simulateVision, worstCaseContrast, VISION_TYPES, type VisionType, } from "./contrast.js";
|
|
6
|
+
export { MIN_PALETTE_CONTRAST, drawPalette, hslToRgb, type Rgb, } from "./palette.js";
|
|
4
7
|
export { paintDecoys, paintDecoyPiece } from "./decoys.js";
|
|
5
8
|
export { encodeBackground, encodePiece, encodePng, toDataUri, } from "./encode.js";
|
|
6
9
|
export type { NotchPlacement, PuzzleGeometry, PuzzleRenderSettings, RenderedPuzzle, RgbaImage, } from "./types.js";
|
|
7
10
|
export declare const DEFAULT_GEOMETRY: PuzzleGeometry;
|
|
8
11
|
export declare const DEFAULT_RENDER_SETTINGS: PuzzleRenderSettings;
|
|
9
|
-
export declare const createBackground: (geometry?: PuzzleGeometry) => RgbaImage;
|
|
10
|
-
export declare const renderPuzzle: (background: RgbaImage, placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings) => Promise<RenderedPuzzle>;
|
|
11
|
-
export declare const createPuzzle: (placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings) => Promise<RenderedPuzzle>;
|
|
12
|
+
export declare const createBackground: (geometry?: PuzzleGeometry, seed?: Buffer) => RgbaImage;
|
|
13
|
+
export declare const renderPuzzle: (background: RgbaImage, placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings, seed?: Buffer) => Promise<RenderedPuzzle>;
|
|
14
|
+
export declare const createPuzzle: (placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings, backgroundSeed?: Buffer, renderSeed?: Buffer) => Promise<RenderedPuzzle>;
|
|
12
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACN,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,GACT,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,SAAS,GACT,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,gBAAgB,EAAE,cAI9B,CAAC;AAQF,eAAO,MAAM,uBAAuB,EAAE,oBAMrC,CAAC;AAQF,eAAO,MAAM,gBAAgB,cAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,KAAK,UAAU,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,KAAK,GAAG,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACN,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,GACT,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,SAAS,GACT,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,gBAAgB,EAAE,cAI9B,CAAC;AAQF,eAAO,MAAM,uBAAuB,EAAE,oBAMrC,CAAC;AAQF,eAAO,MAAM,gBAAgB,cAClB,cAAc,SAClB,MAAM,KACV,SACmE,CAAC;AAOvE,eAAO,MAAM,YAAY,eACZ,SAAS,aACV,cAAc,aACf,cAAc,aACd,oBAAoB,SACxB,MAAM,KACV,OAAO,CAAC,cAAc,CAsCxB,CAAC;AASF,eAAO,MAAM,YAAY,cACb,cAAc,aACf,cAAc,aACd,oBAAoB,mBACd,MAAM,eACV,MAAM,KAChB,OAAO,CAAC,cAAc,CAOvB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { VISION_TYPES, bestPairContrast, contrastRatio, relativeLuminance, simulateVision, worstCaseContrast } from "./contrast.js";
|
|
3
|
+
import { MIN_PALETTE_CONTRAST, drawPalette, hslToRgb } from "./palette.js";
|
|
2
4
|
import { generateBackground } from "./background.js";
|
|
3
5
|
import { createNotchShape } from "./notch.js";
|
|
4
6
|
import { cutNotch } from "./compose.js";
|
|
@@ -35,14 +37,14 @@ var DEFAULT_RENDER_SETTINGS = {
|
|
|
35
37
|
* attacker diff the two composites and read both targets straight off. The
|
|
36
38
|
* caller's buffer is responsible for enforcing consume-once.
|
|
37
39
|
*/
|
|
38
|
-
var createBackground = (geometry = DEFAULT_GEOMETRY) => generateBackground(createPrng(
|
|
40
|
+
var createBackground = (geometry = DEFAULT_GEOMETRY, seed = createSeed()) => generateBackground(createPrng(seed), geometry.width, geometry.height);
|
|
39
41
|
/**
|
|
40
42
|
* Cut a notch at `placement` and encode both halves.
|
|
41
43
|
*
|
|
42
44
|
* The background is consumed (mutated) by this call.
|
|
43
45
|
*/
|
|
44
|
-
var renderPuzzle = async (background, placement, geometry = DEFAULT_GEOMETRY, settings = DEFAULT_RENDER_SETTINGS) => {
|
|
45
|
-
const prng = createPrng(
|
|
46
|
+
var renderPuzzle = async (background, placement, geometry = DEFAULT_GEOMETRY, settings = DEFAULT_RENDER_SETTINGS, seed = createSeed()) => {
|
|
47
|
+
const prng = createPrng(seed);
|
|
46
48
|
const pieceSize = geometry.pieceSize ?? geometry.notchSize;
|
|
47
49
|
paintDecoys(background, prng, settings.decoyCount, pieceSize, placement, settings.decoyEdgeDarkness, settings.decoyBodyBrightness, settings.decoyHoleDarken);
|
|
48
50
|
const { background: cut, piece } = cutNotch(prng, background, createNotchShape(prng, pieceSize), pieceSize, placement, settings.holeDarken);
|
|
@@ -50,10 +52,17 @@ var renderPuzzle = async (background, placement, geometry = DEFAULT_GEOMETRY, se
|
|
|
50
52
|
return {
|
|
51
53
|
background: backgroundWebp,
|
|
52
54
|
piece: pieceWebp,
|
|
53
|
-
pieceSize
|
|
55
|
+
pieceSize,
|
|
56
|
+
seed
|
|
54
57
|
};
|
|
55
58
|
};
|
|
56
|
-
/**
|
|
57
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Convenience: generate, cut and encode in one call.
|
|
61
|
+
*
|
|
62
|
+
* Takes both seeds so a caller holding a persisted pair can reproduce a served
|
|
63
|
+
* challenge byte for byte — the background seed and the render seed are
|
|
64
|
+
* independent and both are required.
|
|
65
|
+
*/
|
|
66
|
+
var createPuzzle = async (placement, geometry = DEFAULT_GEOMETRY, settings = DEFAULT_RENDER_SETTINGS, backgroundSeed = createSeed(), renderSeed = createSeed()) => renderPuzzle(createBackground(geometry, backgroundSeed), placement, geometry, settings, renderSeed);
|
|
58
67
|
//#endregion
|
|
59
|
-
export { DEFAULT_GEOMETRY, DEFAULT_RENDER_SETTINGS, SEED_BYTES, createBackground, createPrng, createPuzzle, createSeed, encodeBackground, encodePiece, encodePng, generateBackground, paintDecoyPiece, paintDecoys, renderPuzzle, toDataUri };
|
|
68
|
+
export { DEFAULT_GEOMETRY, DEFAULT_RENDER_SETTINGS, MIN_PALETTE_CONTRAST, SEED_BYTES, VISION_TYPES, bestPairContrast, contrastRatio, createBackground, createPrng, createPuzzle, createSeed, drawPalette, encodeBackground, encodePiece, encodePng, generateBackground, hslToRgb, paintDecoyPiece, paintDecoys, relativeLuminance, renderPuzzle, simulateVision, toDataUri, worstCaseContrast };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AASnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/notch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notch.d.ts","sourceRoot":"","sources":["../src/notch.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"notch.d.ts","sourceRoot":"","sources":["../src/notch.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAyBtC,MAAM,WAAW,UAAU;IAE1B,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACzC;AA8GD,eAAO,MAAM,gBAAgB,SAAU,IAAI,QAAQ,MAAM,KAAG,UA4F3D,CAAC;AAMF,eAAO,MAAM,oBAAoB,aAAc,MAAM,KAAG,MAMvD,CAAC"}
|
package/dist/notch.js
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
//#region src/notch.ts
|
|
2
|
-
|
|
2
|
+
/** Unit outward normal and unit along-edge direction for a side. */
|
|
3
|
+
var sideAxes = (side) => {
|
|
3
4
|
switch (side) {
|
|
4
|
-
case 0: return
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
case 0: return {
|
|
6
|
+
normal: [0, -1],
|
|
7
|
+
along: [1, 0]
|
|
8
|
+
};
|
|
9
|
+
case 1: return {
|
|
10
|
+
normal: [1, 0],
|
|
11
|
+
along: [0, 1]
|
|
12
|
+
};
|
|
13
|
+
case 2: return {
|
|
14
|
+
normal: [0, 1],
|
|
15
|
+
along: [-1, 0]
|
|
16
|
+
};
|
|
17
|
+
default: return {
|
|
18
|
+
normal: [-1, 0],
|
|
19
|
+
along: [0, -1]
|
|
20
|
+
};
|
|
8
21
|
}
|
|
9
22
|
};
|
|
10
23
|
var roundedBoxDistance = (px, py, half, radius) => {
|
|
@@ -12,100 +25,109 @@ var roundedBoxDistance = (px, py, half, radius) => {
|
|
|
12
25
|
const qy = Math.abs(py) - half + radius;
|
|
13
26
|
return Math.hypot(Math.max(qx, 0), Math.max(qy, 0)) + Math.min(Math.max(qx, qy), 0) - radius;
|
|
14
27
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const cy = size / 2;
|
|
42
|
-
return { distance(lx, ly) {
|
|
43
|
-
return Math.hypot(lx - cx, ly - cy) - radius;
|
|
44
|
-
} };
|
|
45
|
-
};
|
|
46
|
-
var createRoundedRectShape = (prng, size) => {
|
|
47
|
-
const aspect = prng.range(.5, 1);
|
|
48
|
-
const halfMax = size / 2 * prng.range(.82, .98);
|
|
49
|
-
const [halfW, halfH] = prng.next() < .5 ? [halfMax, halfMax * aspect] : [halfMax * aspect, halfMax];
|
|
50
|
-
const cornerRadius = Math.min(halfW, halfH) * prng.range(.08, .5);
|
|
51
|
-
const cx = size / 2;
|
|
52
|
-
const cy = size / 2;
|
|
53
|
-
return { distance(lx, ly) {
|
|
54
|
-
const px = lx - cx;
|
|
55
|
-
const py = ly - cy;
|
|
56
|
-
const qx = Math.abs(px) - halfW + cornerRadius;
|
|
57
|
-
const qy = Math.abs(py) - halfH + cornerRadius;
|
|
58
|
-
return Math.hypot(Math.max(qx, 0), Math.max(qy, 0)) + Math.min(Math.max(qx, qy), 0) - cornerRadius;
|
|
59
|
-
} };
|
|
60
|
-
};
|
|
61
|
-
var createPolygonShape = (prng, size) => {
|
|
62
|
-
const n = prng.int(3, 8);
|
|
63
|
-
const inradius = size / 2 * prng.range(.85, .98) * Math.cos(Math.PI / n);
|
|
64
|
-
const rotation = prng.next() * Math.PI * 2;
|
|
65
|
-
const normals = [];
|
|
66
|
-
for (let i = 0; i < n; i++) {
|
|
67
|
-
const angle = 2 * Math.PI * i / n - Math.PI / 2 + rotation;
|
|
68
|
-
normals.push([Math.cos(angle), Math.sin(angle)]);
|
|
28
|
+
/**
|
|
29
|
+
* How many of the four edges carry a knob, and which.
|
|
30
|
+
*
|
|
31
|
+
* At least two, so the outline cannot come out as a plain rounded square and
|
|
32
|
+
* fail to read as a jigsaw piece at all. At most three: four knobs on a small
|
|
33
|
+
* square starts to read as a cross or a flower, which is the problem being
|
|
34
|
+
* fixed rather than a jigsaw piece.
|
|
35
|
+
*
|
|
36
|
+
* At least one of them is a tab. A piece with only blanks is a square with bites
|
|
37
|
+
* taken out of it — recognisable as damaged, not as interlocking.
|
|
38
|
+
*/
|
|
39
|
+
var chooseEdges = (prng) => {
|
|
40
|
+
const count = prng.int(2, 3);
|
|
41
|
+
const sides = [
|
|
42
|
+
0,
|
|
43
|
+
1,
|
|
44
|
+
2,
|
|
45
|
+
3
|
|
46
|
+
];
|
|
47
|
+
for (let i = sides.length - 1; i > 0; i--) {
|
|
48
|
+
const j = prng.int(0, i);
|
|
49
|
+
const a = sides[i];
|
|
50
|
+
const b = sides[j];
|
|
51
|
+
if (a === void 0 || b === void 0) continue;
|
|
52
|
+
sides[i] = b;
|
|
53
|
+
sides[j] = a;
|
|
69
54
|
}
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
var createFlowerShape = (prng, size) => {
|
|
84
|
-
const petals = prng.int(4, 8);
|
|
85
|
-
const rAvg = size / 2 * prng.range(.72, .88);
|
|
86
|
-
const rAmp = rAvg * prng.range(.1, .22);
|
|
87
|
-
const phase = prng.next() * Math.PI * 2;
|
|
88
|
-
const cx = size / 2;
|
|
89
|
-
const cy = size / 2;
|
|
90
|
-
return { distance(lx, ly) {
|
|
91
|
-
const px = lx - cx;
|
|
92
|
-
const py = ly - cy;
|
|
93
|
-
return Math.hypot(px, py) - (rAvg + rAmp * Math.cos(petals * Math.atan2(py, px) + phase));
|
|
94
|
-
} };
|
|
55
|
+
const edges = [
|
|
56
|
+
"flat",
|
|
57
|
+
"flat",
|
|
58
|
+
"flat",
|
|
59
|
+
"flat"
|
|
60
|
+
];
|
|
61
|
+
const chosen = sides.slice(0, count);
|
|
62
|
+
for (const side of chosen) edges[side] = prng.next() < .55 ? "tab" : "blank";
|
|
63
|
+
if (!chosen.some((side) => edges[side] === "tab")) {
|
|
64
|
+
const first = chosen[0];
|
|
65
|
+
if (first !== void 0) edges[first] = "tab";
|
|
66
|
+
}
|
|
67
|
+
return edges;
|
|
95
68
|
};
|
|
96
69
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
70
|
+
* Margin left between the silhouette and the edge of its bounding box, in px.
|
|
71
|
+
*
|
|
72
|
+
* One pixel for the anti-aliasing band plus a little slack. The box is the
|
|
73
|
+
* piece's own image and the caller's placement maths assumes the shape is inside
|
|
74
|
+
* it: a tab reaching the border comes out clipped flat, which looks like a
|
|
75
|
+
* manufacturing defect rather than a jigsaw tab.
|
|
76
|
+
*/
|
|
77
|
+
var BOX_MARGIN = 1.5;
|
|
78
|
+
/**
|
|
79
|
+
* Build one jigsaw piece.
|
|
80
|
+
*
|
|
81
|
+
* The body is a rounded square; each chosen edge gets a tab or a blank, and the
|
|
82
|
+
* whole silhouette is scaled down at the end if a tab would otherwise reach past
|
|
83
|
+
* the bounding box the caller places.
|
|
100
84
|
*/
|
|
101
85
|
var createNotchShape = (prng, size) => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
86
|
+
const knobRadius = size * prng.range(.13, .17);
|
|
87
|
+
const nominalHalf = size / 2 - knobRadius * 1.05;
|
|
88
|
+
const edges = chooseEdges(prng);
|
|
89
|
+
const knobs = [];
|
|
90
|
+
let cornerRadius = nominalHalf * prng.range(.14, .3);
|
|
91
|
+
let bodyHalf = nominalHalf;
|
|
92
|
+
for (let side = 0; side < 4; side = side + 1) {
|
|
93
|
+
const kind = edges[side];
|
|
94
|
+
if (kind === void 0 || kind === "flat") continue;
|
|
95
|
+
const { normal, along } = sideAxes(side);
|
|
96
|
+
const radius = knobRadius * prng.range(.88, 1.12);
|
|
97
|
+
const offset = kind === "tab" ? radius * .52 : -radius * .42;
|
|
98
|
+
const slideLimit = Math.max(0, bodyHalf - radius - cornerRadius * .6);
|
|
99
|
+
const slide = prng.range(-slideLimit, slideLimit) * .6;
|
|
100
|
+
knobs.push({
|
|
101
|
+
kind,
|
|
102
|
+
cx: normal[0] * (bodyHalf + offset) + along[0] * slide,
|
|
103
|
+
cy: normal[1] * (bodyHalf + offset) + along[1] * slide,
|
|
104
|
+
radius
|
|
105
|
+
});
|
|
108
106
|
}
|
|
107
|
+
let maxExtent = bodyHalf;
|
|
108
|
+
for (const knob of knobs) {
|
|
109
|
+
if (knob.kind !== "tab") continue;
|
|
110
|
+
maxExtent = Math.max(maxExtent, Math.abs(knob.cx) + knob.radius, Math.abs(knob.cy) + knob.radius);
|
|
111
|
+
}
|
|
112
|
+
const limit = size / 2 - BOX_MARGIN;
|
|
113
|
+
if (maxExtent > limit) {
|
|
114
|
+
const scale = limit / maxExtent;
|
|
115
|
+
bodyHalf *= scale;
|
|
116
|
+
cornerRadius *= scale;
|
|
117
|
+
for (const knob of knobs) {
|
|
118
|
+
knob.cx *= scale;
|
|
119
|
+
knob.cy *= scale;
|
|
120
|
+
knob.radius *= scale;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { distance(lx, ly) {
|
|
124
|
+
const px = lx - size / 2;
|
|
125
|
+
const py = ly - size / 2;
|
|
126
|
+
let d = roundedBoxDistance(px, py, bodyHalf, cornerRadius);
|
|
127
|
+
for (const knob of knobs) if (knob.kind === "tab") d = Math.min(d, Math.hypot(px - knob.cx, py - knob.cy) - knob.radius);
|
|
128
|
+
for (const knob of knobs) if (knob.kind === "blank") d = Math.max(d, -(Math.hypot(px - knob.cx, py - knob.cy) - knob.radius));
|
|
129
|
+
return d;
|
|
130
|
+
} };
|
|
109
131
|
};
|
|
110
132
|
/**
|
|
111
133
|
* Anti-aliased coverage in [0, 1] for a signed distance, using a one-pixel
|
package/dist/notch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notch.js","sourceRoot":"","sources":["../src/notch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notch.js","sourceRoot":"","sources":["../src/notch.ts"],"names":[],"mappings":"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"}
|
package/dist/palette.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ export interface Rgb {
|
|
|
5
5
|
b: number;
|
|
6
6
|
}
|
|
7
7
|
export declare const hslToRgb: (h: number, s: number, l: number) => Rgb;
|
|
8
|
+
export declare const MIN_PALETTE_CONTRAST = 1.6;
|
|
8
9
|
export declare const drawPalette: (prng: Prng, count: number) => Rgb[];
|
|
9
10
|
//# sourceMappingURL=palette.d.ts.map
|
package/dist/palette.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACV;AA4CD,eAAO,MAAM,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,GAa1D,CAAC;AA8BF,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAoCxC,eAAO,MAAM,WAAW,SAAU,IAAI,SAAS,MAAM,KAAG,GAAG,EAsB1D,CAAC"}
|