@prosopo/puzzle-assets 0.1.3 → 0.2.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.
Files changed (46) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +23 -0
  2. package/.turbo/turbo-build$colon$tsc.log +11 -0
  3. package/.turbo/turbo-build.log +25 -0
  4. package/CHANGELOG.md +82 -0
  5. package/LICENSE +201 -0
  6. package/dist/browser.d.ts +3 -2
  7. package/dist/browser.d.ts.map +1 -1
  8. package/dist/browser.js +5 -4
  9. package/dist/browser.js.map +1 -1
  10. package/dist/cjs/compose.cjs +117 -1
  11. package/dist/cjs/contrast.cjs +142 -0
  12. package/dist/cjs/index.cjs +24 -6
  13. package/dist/cjs/notch.cjs +115 -93
  14. package/dist/cjs/palette.cjs +36 -3
  15. package/dist/compose.d.ts +4 -0
  16. package/dist/compose.d.ts.map +1 -1
  17. package/dist/compose.js +117 -2
  18. package/dist/compose.js.map +1 -1
  19. package/dist/contrast.d.ts +9 -0
  20. package/dist/contrast.d.ts.map +1 -0
  21. package/dist/contrast.js +137 -0
  22. package/dist/contrast.js.map +1 -0
  23. package/dist/index.d.ts +5 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +16 -7
  26. package/dist/index.js.map +1 -1
  27. package/dist/notch.d.ts.map +1 -1
  28. package/dist/notch.js +115 -93
  29. package/dist/notch.js.map +1 -1
  30. package/dist/palette.d.ts +1 -0
  31. package/dist/palette.d.ts.map +1 -1
  32. package/dist/palette.js +36 -4
  33. package/dist/palette.js.map +1 -1
  34. package/dist/prng.d.ts.map +1 -1
  35. package/dist/prng.js.map +1 -1
  36. package/dist/tests/pieceReadability.unit.test.d.ts +2 -0
  37. package/dist/tests/pieceReadability.unit.test.d.ts.map +1 -0
  38. package/dist/tests/pieceReadability.unit.test.js +320 -0
  39. package/dist/tests/pieceReadability.unit.test.js.map +1 -0
  40. package/dist/tests/renderReplay.unit.test.d.ts +2 -0
  41. package/dist/tests/renderReplay.unit.test.d.ts.map +1 -0
  42. package/dist/tests/renderReplay.unit.test.js +77 -0
  43. package/dist/tests/renderReplay.unit.test.js.map +1 -0
  44. package/dist/types.d.ts +1 -0
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +59 -60
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"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"}
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"}
@@ -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,14 @@
1
1
  import type { NotchPlacement, PuzzleGeometry, PuzzleRenderSettings, RenderedPuzzle, RgbaImage } from "./types.js";
2
2
  export { createPrng, createSeed, SEED_BYTES } from "./prng.js";
3
3
  export { generateBackground } from "./background.js";
4
+ export { bestPairContrast, contrastRatio, relativeLuminance, simulateVision, worstCaseContrast, VISION_TYPES, type VisionType, } from "./contrast.js";
5
+ export { MIN_PALETTE_CONTRAST, drawPalette, hslToRgb, type Rgb, } from "./palette.js";
4
6
  export { paintDecoys, paintDecoyPiece } from "./decoys.js";
5
7
  export { encodeBackground, encodePiece, encodePng, toDataUri, } from "./encode.js";
6
8
  export type { NotchPlacement, PuzzleGeometry, PuzzleRenderSettings, RenderedPuzzle, RgbaImage, } from "./types.js";
7
9
  export declare const DEFAULT_GEOMETRY: PuzzleGeometry;
8
10
  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>;
11
+ export declare const createBackground: (geometry?: PuzzleGeometry, seed?: Buffer) => RgbaImage;
12
+ export declare const renderPuzzle: (background: RgbaImage, placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings, seed?: Buffer) => Promise<RenderedPuzzle>;
13
+ export declare const createPuzzle: (placement: NotchPlacement, geometry?: PuzzleGeometry, settings?: PuzzleRenderSettings, backgroundSeed?: Buffer, renderSeed?: Buffer) => Promise<RenderedPuzzle>;
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -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,KACtB,SAC2E,CAAC;AAO/E,eAAO,MAAM,YAAY,eACZ,SAAS,aACV,cAAc,aACf,cAAc,aACd,oBAAoB,KAC5B,OAAO,CAAC,cAAc,CAqCxB,CAAC;AAGF,eAAO,MAAM,YAAY,cACb,cAAc,aACf,cAAc,aACd,oBAAoB,KAC5B,OAAO,CAAC,cAAc,CAC+C,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,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(createSeed()), geometry.width, geometry.height);
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(createSeed());
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
- /** Convenience: generate, cut and encode in one call. */
57
- var createPuzzle = async (placement, geometry = DEFAULT_GEOMETRY, settings = DEFAULT_RENDER_SETTINGS) => renderPuzzle(createBackground(geometry), placement, geometry, settings);
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;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,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,EAAE;CACb,CAAC;AAQF,MAAM,CAAC,MAAM,uBAAuB,GAAyB;IAC5D,UAAU,EAAE,CAAC;IACb,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,CAAC;IACtB,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,GAAG;CACpB,CAAC;AAQF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,WAA2B,gBAAgB,EAC/B,EAAE,CACd,kBAAkB,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAO/E,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,UAAqB,EACrB,SAAyB,EACzB,WAA2B,gBAAgB,EAC3C,WAAiC,uBAAuB,EAC9B,EAAE;IAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IAK3D,WAAW,CACV,UAAU,EACV,IAAI,EACJ,QAAQ,CAAC,UAAU,EACnB,SAAS,EACT,SAAS,EACT,QAAQ,CAAC,iBAAiB,EAC1B,QAAQ,CAAC,mBAAmB,EAC5B,QAAQ,CAAC,eAAe,CACxB,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,CAC1C,IAAI,EACJ,UAAU,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,QAAQ,CAAC,UAAU,CACnB,CAAC;IAEF,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,gBAAgB,CAAC,GAAG,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACN,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS;KACT,CAAC;AACH,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,SAAyB,EACzB,WAA2B,gBAAgB,EAC3C,WAAiC,uBAAuB,EAC9B,EAAE,CAC5B,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC"}
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;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,GAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,oBAAoB,EACpB,WAAW,EACX,QAAQ,GAER,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,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,EAAE;CACb,CAAC;AAQF,MAAM,CAAC,MAAM,uBAAuB,GAAyB;IAC5D,UAAU,EAAE,CAAC;IACb,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,CAAC;IACtB,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,GAAG;CACpB,CAAC;AAQF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,WAA2B,gBAAgB,EAC3C,OAAe,UAAU,EAAE,EACf,EAAE,CACd,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAOvE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,UAAqB,EACrB,SAAyB,EACzB,WAA2B,gBAAgB,EAC3C,WAAiC,uBAAuB,EACxD,OAAe,UAAU,EAAE,EACD,EAAE;IAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IAK3D,WAAW,CACV,UAAU,EACV,IAAI,EACJ,QAAQ,CAAC,UAAU,EACnB,SAAS,EACT,SAAS,EACT,QAAQ,CAAC,iBAAiB,EAC1B,QAAQ,CAAC,mBAAmB,EAC5B,QAAQ,CAAC,eAAe,CACxB,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,CAC1C,IAAI,EACJ,UAAU,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,QAAQ,CAAC,UAAU,CACnB,CAAC;IAEF,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,gBAAgB,CAAC,GAAG,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO;QACN,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS;QACT,IAAI;KACJ,CAAC;AACH,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,SAAyB,EACzB,WAA2B,gBAAgB,EAC3C,WAAiC,uBAAuB,EACxD,iBAAyB,UAAU,EAAE,EACrC,aAAqB,UAAU,EAAE,EACP,EAAE,CAC5B,YAAY,CACX,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC1C,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,CACV,CAAC"}
@@ -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;AAWtC,MAAM,WAAW,UAAU;IAE1B,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACzC;AAwKD,eAAO,MAAM,gBAAgB,SAAU,IAAI,QAAQ,MAAM,KAAG,UAc3D,CAAC;AAMF,eAAO,MAAM,oBAAoB,aAAc,MAAM,KAAG,MAMvD,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
- var sideOffset = (side, half, distance) => {
2
+ /** Unit outward normal and unit along-edge direction for a side. */
3
+ var sideAxes = (side) => {
3
4
  switch (side) {
4
- case 0: return [0, -half - distance];
5
- case 1: return [half + distance, 0];
6
- case 2: return [0, half + distance];
7
- default: return [-half - distance, 0];
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
- var createJigsawShape = (prng, size) => {
16
- const knobRadius = size * prng.range(.15, .19);
17
- const bodyHalf = size / 2 - knobRadius * .9;
18
- const cornerRadius = bodyHalf * prng.range(.28, .42);
19
- const knobSide = prng.int(0, 3);
20
- const [knobX, knobY] = sideOffset(knobSide, bodyHalf, -knobRadius * .45);
21
- const hasBite = prng.next() < .55;
22
- const biteSide = (knobSide + prng.int(1, 3)) % 4;
23
- const biteRadius = size * prng.range(.13, .17);
24
- const [biteX, biteY] = sideOffset(biteSide, bodyHalf, -biteRadius * .55);
25
- return { distance(lx, ly) {
26
- const px = lx - size / 2;
27
- const py = ly - size / 2;
28
- const body = roundedBoxDistance(px, py, bodyHalf, cornerRadius);
29
- const knob = Math.hypot(px - knobX, py - knobY) - knobRadius;
30
- let d = Math.min(body, knob);
31
- if (hasBite) {
32
- const bite = Math.hypot(px - biteX, py - biteY) - biteRadius;
33
- d = Math.max(d, -bite);
34
- }
35
- return d;
36
- } };
37
- };
38
- var createCircleShape = (prng, size) => {
39
- const radius = size / 2 * prng.range(.85, .98);
40
- const cx = size / 2;
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 cx = size / 2;
71
- const cy = size / 2;
72
- return { distance(lx, ly) {
73
- const px = lx - cx;
74
- const py = ly - cy;
75
- let maxD = Number.NEGATIVE_INFINITY;
76
- for (const [nx, ny] of normals) {
77
- const d = px * nx + py * ny - inradius;
78
- if (d > maxD) maxD = d;
79
- }
80
- return maxD;
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
- * Pick a random shape family per call. The real piece and its hole are cut
98
- * from the same call so they match; decoys each call independently so they
99
- * form a mixed field of silhouettes on the frame.
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
- switch (prng.int(0, 4)) {
103
- case 0: return createJigsawShape(prng, size);
104
- case 1: return createCircleShape(prng, size);
105
- case 2: return createRoundedRectShape(prng, size);
106
- case 3: return createPolygonShape(prng, size);
107
- default: return createFlowerShape(prng, size);
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":"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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"AAcA,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;AAYF,eAAO,MAAM,WAAW,SAAU,IAAI,SAAS,MAAM,KAAG,GAAG,EAoB1D,CAAC"}
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"}