canvas-emulator 1.0.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 (147) hide show
  1. package/.gitignore +233 -0
  2. package/CLAUDE.md +61 -0
  3. package/README.md +128 -0
  4. package/dist/cjs/playground.d.ts +2 -0
  5. package/dist/cjs/playground.d.ts.map +1 -0
  6. package/dist/cjs/playground.js +37 -0
  7. package/dist/cjs/playground.js.map +1 -0
  8. package/dist/cjs/src/canvas/canvas.d.ts +41 -0
  9. package/dist/cjs/src/canvas/canvas.d.ts.map +1 -0
  10. package/dist/cjs/src/canvas/canvas.js +83 -0
  11. package/dist/cjs/src/canvas/canvas.js.map +1 -0
  12. package/dist/cjs/src/canvas/context-2d.d.ts +37 -0
  13. package/dist/cjs/src/canvas/context-2d.d.ts.map +1 -0
  14. package/dist/cjs/src/canvas/context-2d.js +245 -0
  15. package/dist/cjs/src/canvas/context-2d.js.map +1 -0
  16. package/dist/cjs/src/canvas/index.d.ts +2 -0
  17. package/dist/cjs/src/canvas/index.d.ts.map +1 -0
  18. package/dist/cjs/src/canvas/index.js +18 -0
  19. package/dist/cjs/src/canvas/index.js.map +1 -0
  20. package/dist/cjs/src/common/array.d.ts +40 -0
  21. package/dist/cjs/src/common/array.d.ts.map +1 -0
  22. package/dist/cjs/src/common/array.js +99 -0
  23. package/dist/cjs/src/common/array.js.map +1 -0
  24. package/dist/cjs/src/common/colors.d.ts +62 -0
  25. package/dist/cjs/src/common/colors.d.ts.map +1 -0
  26. package/dist/cjs/src/common/colors.js +93 -0
  27. package/dist/cjs/src/common/colors.js.map +1 -0
  28. package/dist/cjs/src/common/hash.d.ts +3 -0
  29. package/dist/cjs/src/common/hash.d.ts.map +1 -0
  30. package/dist/cjs/src/common/hash.js +44 -0
  31. package/dist/cjs/src/common/hash.js.map +1 -0
  32. package/dist/cjs/src/common/index.d.ts +7 -0
  33. package/dist/cjs/src/common/index.d.ts.map +1 -0
  34. package/dist/cjs/src/common/index.js +23 -0
  35. package/dist/cjs/src/common/index.js.map +1 -0
  36. package/dist/cjs/src/common/ppm.d.ts +2 -0
  37. package/dist/cjs/src/common/ppm.d.ts.map +1 -0
  38. package/dist/cjs/src/common/ppm.js +21 -0
  39. package/dist/cjs/src/common/ppm.js.map +1 -0
  40. package/dist/cjs/src/common/scalar.d.ts +27 -0
  41. package/dist/cjs/src/common/scalar.d.ts.map +1 -0
  42. package/dist/cjs/src/common/scalar.js +65 -0
  43. package/dist/cjs/src/common/scalar.js.map +1 -0
  44. package/dist/cjs/src/common/types.d.ts +9 -0
  45. package/dist/cjs/src/common/types.d.ts.map +1 -0
  46. package/dist/cjs/src/common/types.js +3 -0
  47. package/dist/cjs/src/common/types.js.map +1 -0
  48. package/dist/cjs/src/data/font/index.d.ts +2 -0
  49. package/dist/cjs/src/data/font/index.d.ts.map +1 -0
  50. package/dist/cjs/src/data/font/index.js +18 -0
  51. package/dist/cjs/src/data/font/index.js.map +1 -0
  52. package/dist/cjs/src/data/font/noto-mono-regular-48.d.ts +747 -0
  53. package/dist/cjs/src/data/font/noto-mono-regular-48.d.ts.map +1 -0
  54. package/dist/cjs/src/data/font/noto-mono-regular-48.js +15544 -0
  55. package/dist/cjs/src/data/font/noto-mono-regular-48.js.map +1 -0
  56. package/dist/cjs/src/data/font/noto-mono-regular-48.json +15540 -0
  57. package/dist/cjs/src/data/index.d.ts +2 -0
  58. package/dist/cjs/src/data/index.d.ts.map +1 -0
  59. package/dist/cjs/src/data/index.js +18 -0
  60. package/dist/cjs/src/data/index.js.map +1 -0
  61. package/dist/cjs/src/index.d.ts +4 -0
  62. package/dist/cjs/src/index.d.ts.map +1 -0
  63. package/dist/cjs/src/index.js +20 -0
  64. package/dist/cjs/src/index.js.map +1 -0
  65. package/dist/esm/playground.d.ts +2 -0
  66. package/dist/esm/playground.d.ts.map +1 -0
  67. package/dist/esm/playground.js +37 -0
  68. package/dist/esm/playground.js.map +1 -0
  69. package/dist/esm/src/canvas/canvas.d.ts +41 -0
  70. package/dist/esm/src/canvas/canvas.d.ts.map +1 -0
  71. package/dist/esm/src/canvas/canvas.js +83 -0
  72. package/dist/esm/src/canvas/canvas.js.map +1 -0
  73. package/dist/esm/src/canvas/context-2d.d.ts +37 -0
  74. package/dist/esm/src/canvas/context-2d.d.ts.map +1 -0
  75. package/dist/esm/src/canvas/context-2d.js +245 -0
  76. package/dist/esm/src/canvas/context-2d.js.map +1 -0
  77. package/dist/esm/src/canvas/index.d.ts +2 -0
  78. package/dist/esm/src/canvas/index.d.ts.map +1 -0
  79. package/dist/esm/src/canvas/index.js +18 -0
  80. package/dist/esm/src/canvas/index.js.map +1 -0
  81. package/dist/esm/src/common/array.d.ts +40 -0
  82. package/dist/esm/src/common/array.d.ts.map +1 -0
  83. package/dist/esm/src/common/array.js +99 -0
  84. package/dist/esm/src/common/array.js.map +1 -0
  85. package/dist/esm/src/common/colors.d.ts +62 -0
  86. package/dist/esm/src/common/colors.d.ts.map +1 -0
  87. package/dist/esm/src/common/colors.js +93 -0
  88. package/dist/esm/src/common/colors.js.map +1 -0
  89. package/dist/esm/src/common/hash.d.ts +3 -0
  90. package/dist/esm/src/common/hash.d.ts.map +1 -0
  91. package/dist/esm/src/common/hash.js +44 -0
  92. package/dist/esm/src/common/hash.js.map +1 -0
  93. package/dist/esm/src/common/index.d.ts +7 -0
  94. package/dist/esm/src/common/index.d.ts.map +1 -0
  95. package/dist/esm/src/common/index.js +23 -0
  96. package/dist/esm/src/common/index.js.map +1 -0
  97. package/dist/esm/src/common/ppm.d.ts +2 -0
  98. package/dist/esm/src/common/ppm.d.ts.map +1 -0
  99. package/dist/esm/src/common/ppm.js +21 -0
  100. package/dist/esm/src/common/ppm.js.map +1 -0
  101. package/dist/esm/src/common/scalar.d.ts +27 -0
  102. package/dist/esm/src/common/scalar.d.ts.map +1 -0
  103. package/dist/esm/src/common/scalar.js +65 -0
  104. package/dist/esm/src/common/scalar.js.map +1 -0
  105. package/dist/esm/src/common/types.d.ts +9 -0
  106. package/dist/esm/src/common/types.d.ts.map +1 -0
  107. package/dist/esm/src/common/types.js +3 -0
  108. package/dist/esm/src/common/types.js.map +1 -0
  109. package/dist/esm/src/data/font/index.d.ts +2 -0
  110. package/dist/esm/src/data/font/index.d.ts.map +1 -0
  111. package/dist/esm/src/data/font/index.js +18 -0
  112. package/dist/esm/src/data/font/index.js.map +1 -0
  113. package/dist/esm/src/data/font/noto-mono-regular-48.d.ts +747 -0
  114. package/dist/esm/src/data/font/noto-mono-regular-48.d.ts.map +1 -0
  115. package/dist/esm/src/data/font/noto-mono-regular-48.js +15544 -0
  116. package/dist/esm/src/data/font/noto-mono-regular-48.js.map +1 -0
  117. package/dist/esm/src/data/font/noto-mono-regular-48.json +15540 -0
  118. package/dist/esm/src/data/index.d.ts +2 -0
  119. package/dist/esm/src/data/index.d.ts.map +1 -0
  120. package/dist/esm/src/data/index.js +18 -0
  121. package/dist/esm/src/data/index.js.map +1 -0
  122. package/dist/esm/src/index.d.ts +4 -0
  123. package/dist/esm/src/index.d.ts.map +1 -0
  124. package/dist/esm/src/index.js +20 -0
  125. package/dist/esm/src/index.js.map +1 -0
  126. package/package.json +43 -0
  127. package/playground.ts +41 -0
  128. package/pnpm-lock.yaml +352 -0
  129. package/render_font.py +98 -0
  130. package/src/canvas/canvas.ts +123 -0
  131. package/src/canvas/context-2d.ts +305 -0
  132. package/src/canvas/index.ts +1 -0
  133. package/src/common/array.ts +176 -0
  134. package/src/common/colors.ts +93 -0
  135. package/src/common/hash.ts +46 -0
  136. package/src/common/index.ts +6 -0
  137. package/src/common/ppm.ts +28 -0
  138. package/src/common/scalar.ts +72 -0
  139. package/src/common/types.ts +10 -0
  140. package/src/data/font/index.ts +1 -0
  141. package/src/data/font/noto-mono-regular-48.json +15540 -0
  142. package/src/data/font/noto-mono-regular-48.ts +15540 -0
  143. package/src/data/index.ts +1 -0
  144. package/src/index.ts +3 -0
  145. package/tsconfig.cjs.json +10 -0
  146. package/tsconfig.esm.json +10 -0
  147. package/tsconfig.json +23 -0
@@ -0,0 +1,2 @@
1
+ export * from './font';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./font"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
@@ -0,0 +1,4 @@
1
+ export * from "./canvas";
2
+ export * from "./common";
3
+ export * from './data';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./canvas"), exports);
18
+ __exportStar(require("./common"), exports);
19
+ __exportStar(require("./data"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=playground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../playground.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const src_1 = require("./src");
7
+ const canvas_1 = require("./src/canvas/canvas");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const canvas = (0, canvas_1.createCanvas)({
10
+ width: 512,
11
+ height: 512
12
+ });
13
+ const ctx = canvas.getContext2D();
14
+ //ctx.save();
15
+ //ctx.beginPath();
16
+ //ctx.lineTo(canvas.width, canvas.height);
17
+ //ctx.closePath();
18
+ //ctx.stroke();
19
+ //ctx.restore();
20
+ //ctx.save();
21
+ //ctx.beginPath();
22
+ //ctx.arc(512/2, 512/2, 64, 0);
23
+ //ctx.closePath();
24
+ //ctx.fillStyle = 'purple';
25
+ //ctx.fill();
26
+ //ctx.restore();
27
+ //
28
+ //ctx.save();
29
+ //ctx.beginPath();
30
+ //ctx.rect((512/2)-16, (512/2)-16, 32, 32);
31
+ //ctx.closePath();
32
+ //ctx.fill();
33
+ //ctx.restore();
34
+ ctx.fillText('hello', 0, 512 / 4, 128);
35
+ const ppm = (0, src_1.createPPM)(canvas.width, canvas.height, canvas.renderRGB());
36
+ fs_1.default.writeFileSync('image.ppm', ppm, { encoding: 'utf-8' });
37
+ //# sourceMappingURL=playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.js","sourceRoot":"","sources":["../../playground.ts"],"names":[],"mappings":";;;;;AAAA,+BAAkC;AAClC,gDAAmD;AACnD,4CAAoB;AAEpB,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;IAC1B,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;AAGlC,aAAa;AACb,kBAAkB;AAClB,0CAA0C;AAC1C,kBAAkB;AAClB,eAAe;AACf,gBAAgB;AAIhB,aAAa;AACb,kBAAkB;AAClB,+BAA+B;AAC/B,kBAAkB;AAClB,2BAA2B;AAC3B,aAAa;AACb,gBAAgB;AAChB,EAAE;AACF,aAAa;AACb,kBAAkB;AAClB,2CAA2C;AAC3C,kBAAkB;AAClB,aAAa;AACb,gBAAgB;AAEhB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,GAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAErC,MAAM,GAAG,GAAG,IAAA,eAAS,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAEvE,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type CanvasContext2D } from "./context-2d";
2
+ export type Pixel = [number, number, number, number];
3
+ export type Point = [number, number];
4
+ export interface Canvas {
5
+ width: number;
6
+ height: number;
7
+ channels: number;
8
+ data: Array<number>;
9
+ indexAt(p: Point): number;
10
+ at(p: Point): Pixel;
11
+ atUV(p: Point): Pixel;
12
+ setAt(p: Point, px: Pixel | number): void;
13
+ setAtUV(p: Point, px: Pixel | number): void;
14
+ each(fn: (pos: Point, uv: Point) => void): void;
15
+ renderRGBA(): Array<Pixel>;
16
+ renderRGB(): Array<[number, number, number]>;
17
+ getContext2D(): CanvasContext2D;
18
+ }
19
+ export type CanvasConfig = {
20
+ width: number;
21
+ height: number;
22
+ };
23
+ export declare class CanvasImpl implements Canvas {
24
+ width: number;
25
+ height: number;
26
+ channels: 4;
27
+ data: Array<number>;
28
+ private readonly length;
29
+ constructor(cfg: CanvasConfig);
30
+ indexAt(p: Point): number;
31
+ at(p: Point): Pixel;
32
+ atUV(p: Point): Pixel;
33
+ setAt(p: Point, px: Pixel | number): void;
34
+ setAtUV(p: Point, px: Pixel | number): void;
35
+ each(fn: (pos: Point, uv: Point) => void): void;
36
+ renderRGBA(): Array<Pixel>;
37
+ renderRGB(): Array<[number, number, number]>;
38
+ getContext2D(): CanvasContext2D;
39
+ }
40
+ export declare const createCanvas: (cfg: CanvasConfig) => Canvas;
41
+ //# sourceMappingURL=canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/canvas.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEtB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAE5C,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAEhD,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,SAAS,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7C,YAAY,IAAI,eAAe,CAAC;CACjC;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,UAAW,YAAW,MAAM;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAK;IAChB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,GAAG,EAAE,YAAY;IAQ7B,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;IAMzB,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK;IAKnB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK;IAMrB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAiBzC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAM3C,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAU/C,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC;IAI1B,SAAS,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAW5C,YAAY,IAAI,eAAe;CAGhC;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,YAAY,KAAG,MAEhD,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCanvas = exports.CanvasImpl = void 0;
4
+ const array_1 = require("../common/array");
5
+ const scalar_1 = require("../common/scalar");
6
+ const context_2d_1 = require("./context-2d");
7
+ class CanvasImpl {
8
+ width;
9
+ height;
10
+ channels = 4;
11
+ data;
12
+ length;
13
+ constructor(cfg) {
14
+ const { width, height } = cfg;
15
+ this.width = width;
16
+ this.height = height;
17
+ this.length = width * height * this.channels;
18
+ this.data = (0, array_1.range)(this.length).fill(0);
19
+ }
20
+ indexAt(p) {
21
+ const x = Math.floor(p[0]);
22
+ const y = Math.floor(p[1]);
23
+ return (0, scalar_1.clamp)((y * this.width + x) * this.channels, 0, this.length - 1);
24
+ }
25
+ at(p) {
26
+ const idx = this.indexAt(p);
27
+ return this.data.slice(idx, idx + this.channels);
28
+ }
29
+ atUV(p) {
30
+ const x = p[0] * this.width;
31
+ const y = p[1] * this.height;
32
+ return this.at([x, y]);
33
+ }
34
+ setAt(p, px) {
35
+ const idx = this.indexAt(p);
36
+ const nextAlpha = typeof px === "number" ? 1.0 : px[3];
37
+ const current = this.at(p);
38
+ const currentAlpha = current[3];
39
+ const nextData = typeof px === "number" ? [px, px, px, px] : px;
40
+ const mixCurrent = (0, scalar_1.smoothstep)(0, 1, currentAlpha - nextAlpha);
41
+ const mixNext = (0, scalar_1.smoothstep)(0, 1, nextAlpha);
42
+ for (let i = 0; i < nextData.length; i++) {
43
+ this.data[idx + i] =
44
+ this.data[idx + i] * mixCurrent + nextData[i] * mixNext;
45
+ }
46
+ }
47
+ setAtUV(p, px) {
48
+ const x = p[0] * this.width;
49
+ const y = p[1] * this.height;
50
+ return this.setAt([x, y], px);
51
+ }
52
+ each(fn) {
53
+ for (let y = 0; y < this.height; y++) {
54
+ for (let x = 0; x < this.width; x++) {
55
+ const p = [x, y];
56
+ const uv = [x / this.width, y / this.height];
57
+ fn(p, uv);
58
+ }
59
+ }
60
+ }
61
+ renderRGBA() {
62
+ return (0, array_1.toBatched)(this.data, this.channels, 0);
63
+ }
64
+ renderRGB() {
65
+ const pixels = [];
66
+ for (let i = 0; i < this.data.length; i += this.channels) {
67
+ const r = this.data[i];
68
+ const g = this.data[i + 1];
69
+ const b = this.data[i + 2];
70
+ pixels.push([r, g, b]);
71
+ }
72
+ return pixels;
73
+ }
74
+ getContext2D() {
75
+ return new context_2d_1.CanvasContext2DImpl(this);
76
+ }
77
+ }
78
+ exports.CanvasImpl = CanvasImpl;
79
+ const createCanvas = (cfg) => {
80
+ return new CanvasImpl(cfg);
81
+ };
82
+ exports.createCanvas = createCanvas;
83
+ //# sourceMappingURL=canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../../src/canvas/canvas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type Canvas } from "./canvas";
2
+ export type TextMetrics = {
3
+ width: number;
4
+ };
5
+ export type CanvasContext2D = CanvasContext2DImpl;
6
+ export declare class CanvasContext2DImpl {
7
+ canvas: Canvas;
8
+ private stack;
9
+ constructor(canvas: Canvas);
10
+ private get state();
11
+ get fillStyle(): string;
12
+ set fillStyle(value: string);
13
+ get strokeStyle(): string;
14
+ set strokeStyle(value: string);
15
+ save(): void;
16
+ restore(): void;
17
+ moveTo(x: number, y: number): void;
18
+ lineTo(x: number, y: number): void;
19
+ arc(x: number, y: number, radius: number, startAngle: number): void;
20
+ rect(x: number, y: number, width: number, height: number): void;
21
+ fill(): void;
22
+ stroke(): void;
23
+ strokeRect(x: number, y: number, width: number, height: number): void;
24
+ fillRect(x: number, y: number, width: number, height: number): void;
25
+ clearRect(x: number, y: number, width: number, height: number): void;
26
+ private drawChar;
27
+ fillText(text: string, x: number, y: number): void;
28
+ fillText(text: string, x: number, y: number, maxWidth: number): void;
29
+ fillText(text: string, x: number, y: number, maxWidth: undefined): void;
30
+ strokeText(text: string, x: number, y: number): void;
31
+ strokeText(text: string, x: number, y: number, maxWidth: number): void;
32
+ strokeText(text: string, x: number, y: number, maxWidth: undefined): void;
33
+ measureText(text: string): TextMetrics;
34
+ beginPath(): void;
35
+ closePath(): void;
36
+ }
37
+ //# sourceMappingURL=context-2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-2d.d.ts","sourceRoot":"","sources":["../../../../src/canvas/context-2d.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAKvC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsDF,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,qBAAa,mBAAmB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAA+B;gBAEhC,MAAM,EAAE,MAAM;IAI1B,OAAO,KAAK,KAAK,GAIhB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAE1B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAI;IAIJ,OAAO,IAAI,IAAI;IAIf,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBnE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAe/D,IAAI,IAAI,IAAI;IAwCZ,MAAM,IAAI,IAAI;IAgCd,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKrE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQpE,OAAO,CAAC,QAAQ;IA2ChB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI;IAUvE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACpD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IACtE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI;IAKzE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAItC,SAAS,IAAI,IAAI;IAGjB,SAAS,IAAI,IAAI;CAGlB"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanvasContext2DImpl = void 0;
4
+ const common_1 = require("../common");
5
+ const noto_mono_regular_48_1 = require("../data/font/noto-mono-regular-48");
6
+ const FONT_WIDTH = 48;
7
+ class State {
8
+ fillStyle = "red";
9
+ strokeStyle = "red";
10
+ cursor = [0, 0];
11
+ points = [];
12
+ paths = [];
13
+ activePath = null;
14
+ fontSize = FONT_WIDTH;
15
+ clone() {
16
+ const copy = new State();
17
+ copy.fillStyle = this.fillStyle;
18
+ copy.strokeStyle = this.strokeStyle;
19
+ copy.cursor = [this.cursor[0], this.cursor[1]];
20
+ copy.points = [...this.points.map((p) => [p[0], p[1]])];
21
+ copy.paths = this.paths.map((p) => [...p]);
22
+ copy.activePath = this.activePath ? [...this.activePath] : null;
23
+ copy.fontSize = this.fontSize;
24
+ return copy;
25
+ }
26
+ get path() {
27
+ if (this.paths.length <= 0)
28
+ return this.points;
29
+ return this.paths[this.paths.length - 1];
30
+ }
31
+ beginPath() {
32
+ this.paths.push([]);
33
+ }
34
+ closePath() {
35
+ const path = this.paths.pop();
36
+ this.activePath = path || null;
37
+ }
38
+ addPoint(point) {
39
+ if (this.activePath !== null) {
40
+ this.activePath.push([point[0], point[1]]);
41
+ return;
42
+ }
43
+ this.points.push([point[0], point[1]]);
44
+ }
45
+ addCursor() {
46
+ this.addPoint(this.cursor);
47
+ }
48
+ setCursor(x, y) {
49
+ this.cursor = [x, y];
50
+ }
51
+ }
52
+ class CanvasContext2DImpl {
53
+ canvas;
54
+ stack = [new State()];
55
+ constructor(canvas) {
56
+ this.canvas = canvas;
57
+ }
58
+ get state() {
59
+ const states = this.stack;
60
+ if (states.length <= 0)
61
+ throw new Error("Out of states");
62
+ return states[states.length - 1];
63
+ }
64
+ get fillStyle() {
65
+ return this.state.fillStyle;
66
+ }
67
+ set fillStyle(value) {
68
+ this.state.fillStyle = value;
69
+ }
70
+ get strokeStyle() {
71
+ return this.state.strokeStyle;
72
+ }
73
+ set strokeStyle(value) {
74
+ this.state.strokeStyle = value;
75
+ }
76
+ save() {
77
+ this.stack.push(this.state.clone());
78
+ }
79
+ restore() {
80
+ this.stack.pop();
81
+ }
82
+ moveTo(x, y) {
83
+ this.state.setCursor(x, y);
84
+ }
85
+ lineTo(x, y) {
86
+ this.state.addCursor();
87
+ this.state.addPoint([x, y]);
88
+ }
89
+ arc(x, y, radius, startAngle) {
90
+ const segments = 32;
91
+ for (let i = 0; i < segments; i++) {
92
+ const angle1 = (0, common_1.remap)(i, [0, segments], [startAngle, Math.PI * 2]);
93
+ const angle2 = (0, common_1.remap)(i + 1, [0, segments], [startAngle, Math.PI * 2]);
94
+ const p1 = [
95
+ x + Math.cos(angle1) * radius,
96
+ y + Math.sin(angle1) * radius,
97
+ ];
98
+ const p2 = [
99
+ x + Math.cos(angle2) * radius,
100
+ y + Math.sin(angle2) * radius,
101
+ ];
102
+ this.state.addPoint(p1);
103
+ this.state.addPoint(p2);
104
+ }
105
+ }
106
+ rect(x, y, width, height) {
107
+ const tl = [x, y];
108
+ const tr = [x + width, y];
109
+ const br = [x + width, y + height];
110
+ const bl = [x, y + height];
111
+ this.state.addPoint(tl);
112
+ this.state.addPoint(tr); // top
113
+ this.state.addPoint(tr);
114
+ this.state.addPoint(br); // right
115
+ this.state.addPoint(br);
116
+ this.state.addPoint(bl); // bottom
117
+ this.state.addPoint(bl);
118
+ this.state.addPoint(tl); // left
119
+ }
120
+ fill() {
121
+ const path = this.state.path;
122
+ if (path.length < 3)
123
+ return;
124
+ const rgb = (0, common_1.toRGB)(this.fillStyle);
125
+ const pixel = [rgb[0], rgb[1], rgb[2], 1];
126
+ let minY = path[0][1];
127
+ let maxY = path[0][1];
128
+ for (const p of path) {
129
+ if (p[1] < minY)
130
+ minY = p[1];
131
+ if (p[1] > maxY)
132
+ maxY = p[1];
133
+ }
134
+ for (let y = Math.ceil(minY); y <= Math.floor(maxY); y++) {
135
+ const intersections = [];
136
+ for (let i = 0; i < path.length; i++) {
137
+ const a = path[i];
138
+ const b = path[(i + 1) % path.length];
139
+ const y1 = a[1];
140
+ const y2 = b[1];
141
+ if ((y1 <= y && y < y2) || (y2 <= y && y < y1)) {
142
+ const x = a[0] + ((y - y1) * (b[0] - a[0])) / (y2 - y1);
143
+ intersections.push(x);
144
+ }
145
+ }
146
+ intersections.sort((a, b) => a - b);
147
+ for (let i = 0; i < intersections.length; i += 2) {
148
+ const x1 = Math.ceil(intersections[i]);
149
+ const x2 = Math.floor(intersections[i + 1]);
150
+ for (let x = x1; x <= x2; x++) {
151
+ this.canvas.setAt([x, y], pixel);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ stroke() {
157
+ const rgb = (0, common_1.toRGB)(this.strokeStyle);
158
+ const pixel = [rgb[0], rgb[1], rgb[2], 1];
159
+ for (let i = 0; i < this.state.path.length; i += 2) {
160
+ const a = this.state.path[(i + 0) % this.state.path.length];
161
+ const b = this.state.path[(i + 1) % this.state.path.length];
162
+ const x1 = a[0];
163
+ const y1 = a[1];
164
+ const x2 = b[0];
165
+ const y2 = b[1];
166
+ const dx = x2 - x1;
167
+ const dy = y2 - y1;
168
+ if (Math.abs(dx) >= Math.abs(dy)) {
169
+ const step = dx >= 0 ? 1 : -1;
170
+ const m = dy / dx;
171
+ for (let x = x1; step > 0 ? x < x2 : x > x2; x += step) {
172
+ const y = m * (x - x1) + y1;
173
+ this.canvas.setAt([x, y], pixel);
174
+ }
175
+ }
176
+ else {
177
+ const step = dy >= 0 ? 1 : -1;
178
+ const m = dx / dy;
179
+ for (let y = y1; step > 0 ? y < y2 : y > y2; y += step) {
180
+ const x = m * (y - y1) + x1;
181
+ this.canvas.setAt([x, y], pixel);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ strokeRect(x, y, width, height) {
187
+ this.rect(x, y, width, height);
188
+ this.stroke();
189
+ }
190
+ fillRect(x, y, width, height) {
191
+ this.rect(x, y, width, height);
192
+ this.fill();
193
+ }
194
+ clearRect(x, y, width, height) {
195
+ for (let py = 0; py < height; py++) {
196
+ for (let px = 0; px < width; px++) {
197
+ this.canvas.setAt([x + px, y + py], [0, 0, 0, 0]);
198
+ }
199
+ }
200
+ }
201
+ drawChar(char, x, y, width, ratio) {
202
+ this.state.fontSize = width;
203
+ const code = char.charCodeAt(0);
204
+ const glyph = noto_mono_regular_48_1.NOTO_MONO_REGULAR_48[`${code}`];
205
+ if (typeof glyph === "undefined")
206
+ throw new Error(`Cannot draw: ${char}`);
207
+ const pixels = glyph.data;
208
+ const height = width;
209
+ for (let py = 0; py < height; py++) {
210
+ for (let px = 0; px < width; px++) {
211
+ const pixelY = Math.floor((py / height) * FONT_WIDTH);
212
+ const pixelX = Math.floor((px / width) * FONT_WIDTH);
213
+ const idx = (0, common_1.clamp)(pixelY * FONT_WIDTH + pixelX, 0, FONT_WIDTH * FONT_WIDTH - 1);
214
+ const alpha = pixels[idx];
215
+ const imgX = x + px;
216
+ const imgY = y + py + ratio * 0.5 * glyph.offset_y;
217
+ const rgb = (0, common_1.toRGB)(this.fillStyle);
218
+ this.canvas.setAt([imgX, imgY], [rgb[0], rgb[1], rgb[2], alpha]);
219
+ }
220
+ }
221
+ return glyph;
222
+ }
223
+ fillText(text, x, y, maxWidth) {
224
+ const width = maxWidth || FONT_WIDTH;
225
+ const ratio = width / FONT_WIDTH;
226
+ for (const c of text) {
227
+ const glyph = this.drawChar(c, x, y, width, ratio);
228
+ x += ratio * glyph.advance;
229
+ }
230
+ }
231
+ strokeText(text, x, y, maxWidth) {
232
+ this.fillText(text, x, y, maxWidth || 48);
233
+ }
234
+ measureText(text) {
235
+ return { width: text.length * this.state.fontSize * 0.5 };
236
+ }
237
+ beginPath() {
238
+ this.state.beginPath();
239
+ }
240
+ closePath() {
241
+ this.state.closePath();
242
+ }
243
+ }
244
+ exports.CanvasContext2DImpl = CanvasContext2DImpl;
245
+ //# sourceMappingURL=context-2d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-2d.js","sourceRoot":"","sources":["../../../../src/canvas/context-2d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./canvas";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./canvas"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/canvas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -0,0 +1,40 @@
1
+ import { type Triple, type Pair, V2, V3 } from "./types";
2
+ export declare const range: (n: number) => number[];
3
+ export declare const zipMin: <A, B>(a: A[], b: B[]) => Array<Pair<A, B>>;
4
+ export declare const zipMax: <A, B>(a: A[], b: B[]) => Array<Pair<A | undefined, B | undefined>>;
5
+ export declare function toBatched<T>(arr: T[], batchSize: 1, padding: T): Array<[T]>;
6
+ export declare function toBatched<T>(arr: T[], batchSize: 2, padding: T): Array<[T, T]>;
7
+ export declare function toBatched<T>(arr: T[], batchSize: 3, padding: T): Array<[T, T, T]>;
8
+ export declare function toBatched<T>(arr: T[], batchSize: 4, padding: T): Array<[T, T, T, T]>;
9
+ export declare function toBatched<T>(arr: T[], batchSize: 5, padding: T): Array<[T, T, T, T, T]>;
10
+ export declare function toBatched<T>(arr: T[], batchSize: 6, padding: T): Array<[T, T, T, T, T, T]>;
11
+ export declare function toBatched<T>(arr: T[], batchSize: 7, padding: T): Array<[T, T, T, T, T, T, T]>;
12
+ export declare function toBatched<T>(arr: T[], batchSize: 8, padding: T): Array<[T, T, T, T, T, T, T, T]>;
13
+ export declare function toBatched<T>(arr: T[], batchSize: number, padding: T): Array<T[]>;
14
+ export declare function toBatched<T>(arr: T[], batchSize: number): Array<T[]>;
15
+ export declare function toBatched<T>(arr: T[], batchSize: number, padding?: T): Array<T[]>;
16
+ export declare const sum: (arr: number[]) => number;
17
+ export declare const average: (arr: number[]) => number;
18
+ export declare const magnitude: (arr: number[]) => number;
19
+ export declare const normalizeSq: <Arr extends number[]>(arr: Arr) => Arr;
20
+ export declare const unit: <Arr extends number[]>(arr: Arr) => Arr;
21
+ export declare const dot: (a: number[], b: number[]) => number;
22
+ export declare const cross: (a: number[] | Triple<number, number, number>, b: number[] | Triple<number, number, number>) => Triple<number, number, number>;
23
+ export declare function add(a: V2, b: V2): V2;
24
+ export declare function add(a: V3, b: V3): V3;
25
+ export declare function add(a: number[], b: number[]): number[];
26
+ export declare function sub(a: V2, b: V2): V2;
27
+ export declare function sub(a: V3, b: V3): V3;
28
+ export declare function sub(a: number[], b: number[]): number[];
29
+ export declare function mul(a: V2, b: V2): V2;
30
+ export declare function mul(a: V3, b: V3): V3;
31
+ export declare function mul(a: number[], b: number[]): number[];
32
+ export declare function div(a: V2, b: V2): V2;
33
+ export declare function div(a: V3, b: V3): V3;
34
+ export declare function div(a: number[], b: number[]): number[];
35
+ export declare function scale(a: V2, s: number): V2;
36
+ export declare function scale(a: V3, s: number): V3;
37
+ export declare function scale(a: number[], s: number): number[];
38
+ export declare const distance: (a: number[], b: number[]) => number;
39
+ export declare const cosineDistance: (a: number[], b: number[]) => number;
40
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../src/common/array.ts"],"names":[],"mappings":"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"}