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.
- package/.gitignore +233 -0
- package/CLAUDE.md +61 -0
- package/README.md +128 -0
- package/dist/cjs/playground.d.ts +2 -0
- package/dist/cjs/playground.d.ts.map +1 -0
- package/dist/cjs/playground.js +37 -0
- package/dist/cjs/playground.js.map +1 -0
- package/dist/cjs/src/canvas/canvas.d.ts +41 -0
- package/dist/cjs/src/canvas/canvas.d.ts.map +1 -0
- package/dist/cjs/src/canvas/canvas.js +83 -0
- package/dist/cjs/src/canvas/canvas.js.map +1 -0
- package/dist/cjs/src/canvas/context-2d.d.ts +37 -0
- package/dist/cjs/src/canvas/context-2d.d.ts.map +1 -0
- package/dist/cjs/src/canvas/context-2d.js +245 -0
- package/dist/cjs/src/canvas/context-2d.js.map +1 -0
- package/dist/cjs/src/canvas/index.d.ts +2 -0
- package/dist/cjs/src/canvas/index.d.ts.map +1 -0
- package/dist/cjs/src/canvas/index.js +18 -0
- package/dist/cjs/src/canvas/index.js.map +1 -0
- package/dist/cjs/src/common/array.d.ts +40 -0
- package/dist/cjs/src/common/array.d.ts.map +1 -0
- package/dist/cjs/src/common/array.js +99 -0
- package/dist/cjs/src/common/array.js.map +1 -0
- package/dist/cjs/src/common/colors.d.ts +62 -0
- package/dist/cjs/src/common/colors.d.ts.map +1 -0
- package/dist/cjs/src/common/colors.js +93 -0
- package/dist/cjs/src/common/colors.js.map +1 -0
- package/dist/cjs/src/common/hash.d.ts +3 -0
- package/dist/cjs/src/common/hash.d.ts.map +1 -0
- package/dist/cjs/src/common/hash.js +44 -0
- package/dist/cjs/src/common/hash.js.map +1 -0
- package/dist/cjs/src/common/index.d.ts +7 -0
- package/dist/cjs/src/common/index.d.ts.map +1 -0
- package/dist/cjs/src/common/index.js +23 -0
- package/dist/cjs/src/common/index.js.map +1 -0
- package/dist/cjs/src/common/ppm.d.ts +2 -0
- package/dist/cjs/src/common/ppm.d.ts.map +1 -0
- package/dist/cjs/src/common/ppm.js +21 -0
- package/dist/cjs/src/common/ppm.js.map +1 -0
- package/dist/cjs/src/common/scalar.d.ts +27 -0
- package/dist/cjs/src/common/scalar.d.ts.map +1 -0
- package/dist/cjs/src/common/scalar.js +65 -0
- package/dist/cjs/src/common/scalar.js.map +1 -0
- package/dist/cjs/src/common/types.d.ts +9 -0
- package/dist/cjs/src/common/types.d.ts.map +1 -0
- package/dist/cjs/src/common/types.js +3 -0
- package/dist/cjs/src/common/types.js.map +1 -0
- package/dist/cjs/src/data/font/index.d.ts +2 -0
- package/dist/cjs/src/data/font/index.d.ts.map +1 -0
- package/dist/cjs/src/data/font/index.js +18 -0
- package/dist/cjs/src/data/font/index.js.map +1 -0
- package/dist/cjs/src/data/font/noto-mono-regular-48.d.ts +747 -0
- package/dist/cjs/src/data/font/noto-mono-regular-48.d.ts.map +1 -0
- package/dist/cjs/src/data/font/noto-mono-regular-48.js +15544 -0
- package/dist/cjs/src/data/font/noto-mono-regular-48.js.map +1 -0
- package/dist/cjs/src/data/font/noto-mono-regular-48.json +15540 -0
- package/dist/cjs/src/data/index.d.ts +2 -0
- package/dist/cjs/src/data/index.d.ts.map +1 -0
- package/dist/cjs/src/data/index.js +18 -0
- package/dist/cjs/src/data/index.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +20 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/esm/playground.d.ts +2 -0
- package/dist/esm/playground.d.ts.map +1 -0
- package/dist/esm/playground.js +37 -0
- package/dist/esm/playground.js.map +1 -0
- package/dist/esm/src/canvas/canvas.d.ts +41 -0
- package/dist/esm/src/canvas/canvas.d.ts.map +1 -0
- package/dist/esm/src/canvas/canvas.js +83 -0
- package/dist/esm/src/canvas/canvas.js.map +1 -0
- package/dist/esm/src/canvas/context-2d.d.ts +37 -0
- package/dist/esm/src/canvas/context-2d.d.ts.map +1 -0
- package/dist/esm/src/canvas/context-2d.js +245 -0
- package/dist/esm/src/canvas/context-2d.js.map +1 -0
- package/dist/esm/src/canvas/index.d.ts +2 -0
- package/dist/esm/src/canvas/index.d.ts.map +1 -0
- package/dist/esm/src/canvas/index.js +18 -0
- package/dist/esm/src/canvas/index.js.map +1 -0
- package/dist/esm/src/common/array.d.ts +40 -0
- package/dist/esm/src/common/array.d.ts.map +1 -0
- package/dist/esm/src/common/array.js +99 -0
- package/dist/esm/src/common/array.js.map +1 -0
- package/dist/esm/src/common/colors.d.ts +62 -0
- package/dist/esm/src/common/colors.d.ts.map +1 -0
- package/dist/esm/src/common/colors.js +93 -0
- package/dist/esm/src/common/colors.js.map +1 -0
- package/dist/esm/src/common/hash.d.ts +3 -0
- package/dist/esm/src/common/hash.d.ts.map +1 -0
- package/dist/esm/src/common/hash.js +44 -0
- package/dist/esm/src/common/hash.js.map +1 -0
- package/dist/esm/src/common/index.d.ts +7 -0
- package/dist/esm/src/common/index.d.ts.map +1 -0
- package/dist/esm/src/common/index.js +23 -0
- package/dist/esm/src/common/index.js.map +1 -0
- package/dist/esm/src/common/ppm.d.ts +2 -0
- package/dist/esm/src/common/ppm.d.ts.map +1 -0
- package/dist/esm/src/common/ppm.js +21 -0
- package/dist/esm/src/common/ppm.js.map +1 -0
- package/dist/esm/src/common/scalar.d.ts +27 -0
- package/dist/esm/src/common/scalar.d.ts.map +1 -0
- package/dist/esm/src/common/scalar.js +65 -0
- package/dist/esm/src/common/scalar.js.map +1 -0
- package/dist/esm/src/common/types.d.ts +9 -0
- package/dist/esm/src/common/types.d.ts.map +1 -0
- package/dist/esm/src/common/types.js +3 -0
- package/dist/esm/src/common/types.js.map +1 -0
- package/dist/esm/src/data/font/index.d.ts +2 -0
- package/dist/esm/src/data/font/index.d.ts.map +1 -0
- package/dist/esm/src/data/font/index.js +18 -0
- package/dist/esm/src/data/font/index.js.map +1 -0
- package/dist/esm/src/data/font/noto-mono-regular-48.d.ts +747 -0
- package/dist/esm/src/data/font/noto-mono-regular-48.d.ts.map +1 -0
- package/dist/esm/src/data/font/noto-mono-regular-48.js +15544 -0
- package/dist/esm/src/data/font/noto-mono-regular-48.js.map +1 -0
- package/dist/esm/src/data/font/noto-mono-regular-48.json +15540 -0
- package/dist/esm/src/data/index.d.ts +2 -0
- package/dist/esm/src/data/index.d.ts.map +1 -0
- package/dist/esm/src/data/index.js +18 -0
- package/dist/esm/src/data/index.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +20 -0
- package/dist/esm/src/index.js.map +1 -0
- package/package.json +43 -0
- package/playground.ts +41 -0
- package/pnpm-lock.yaml +352 -0
- package/render_font.py +98 -0
- package/src/canvas/canvas.ts +123 -0
- package/src/canvas/context-2d.ts +305 -0
- package/src/canvas/index.ts +1 -0
- package/src/common/array.ts +176 -0
- package/src/common/colors.ts +93 -0
- package/src/common/hash.ts +46 -0
- package/src/common/index.ts +6 -0
- package/src/common/ppm.ts +28 -0
- package/src/common/scalar.ts +72 -0
- package/src/common/types.ts +10 -0
- package/src/data/font/index.ts +1 -0
- package/src/data/font/noto-mono-regular-48.json +15540 -0
- package/src/data/font/noto-mono-regular-48.ts +15540 -0
- package/src/data/index.ts +1 -0
- package/src/index.ts +3 -0
- package/tsconfig.cjs.json +10 -0
- package/tsconfig.esm.json +10 -0
- package/tsconfig.json +23 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|