@neta-art/cohub 9.0.1 → 11.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/README.md +108 -102
- package/dist/board/editor/align.d.ts +11 -0
- package/dist/board/editor/align.js +72 -0
- package/dist/board/editor/animation.d.ts +17 -0
- package/dist/board/editor/animation.js +187 -0
- package/dist/board/editor/camera.d.ts +32 -0
- package/dist/board/editor/camera.js +137 -0
- package/dist/board/editor/clipboard.d.ts +41 -0
- package/dist/board/editor/clipboard.js +129 -0
- package/dist/board/editor/connection-ports.d.ts +19 -0
- package/dist/board/editor/connection-ports.js +85 -0
- package/dist/board/editor/context.d.ts +111 -0
- package/dist/board/editor/context.js +30 -0
- package/dist/board/editor/copy.d.ts +17 -0
- package/dist/board/editor/copy.js +121 -0
- package/dist/board/editor/creation.d.ts +51 -0
- package/dist/board/editor/creation.js +225 -0
- package/dist/board/editor/deletion.d.ts +9 -0
- package/dist/board/editor/deletion.js +90 -0
- package/dist/board/editor/document-edits.d.ts +22 -0
- package/dist/board/editor/document-edits.js +193 -0
- package/dist/board/editor/document.d.ts +41 -0
- package/dist/board/editor/document.js +302 -0
- package/dist/board/editor/editor.d.ts +225 -0
- package/dist/board/editor/editor.js +439 -0
- package/dist/board/editor/index.d.ts +18 -0
- package/dist/board/editor/index.js +12 -0
- package/dist/board/editor/interaction.d.ts +115 -0
- package/dist/board/editor/interaction.js +584 -0
- package/dist/board/editor/query.d.ts +27 -0
- package/dist/board/editor/query.js +203 -0
- package/dist/board/editor/remote.d.ts +11 -0
- package/dist/board/editor/remote.js +55 -0
- package/dist/board/editor/selection-transform.d.ts +24 -0
- package/dist/board/editor/selection-transform.js +81 -0
- package/dist/board/editor/selection.d.ts +33 -0
- package/dist/board/editor/selection.js +197 -0
- package/dist/board/editor/snapping.d.ts +33 -0
- package/dist/board/editor/snapping.js +75 -0
- package/dist/board/editor/snapshots.d.ts +27 -0
- package/dist/board/editor/snapshots.js +132 -0
- package/dist/board/editor/spatial.d.ts +41 -0
- package/dist/board/editor/spatial.js +191 -0
- package/dist/board/editor/state.d.ts +12 -0
- package/dist/board/editor/state.js +49 -0
- package/dist/board/editor/tool.d.ts +10 -0
- package/dist/board/editor/tool.js +19 -0
- package/dist/board/editor/wheel.d.ts +5 -0
- package/dist/board/editor/wheel.js +17 -0
- package/dist/board/export/index.d.ts +28 -6
- package/dist/board/export/index.js +47 -13
- package/dist/board/export/node/index.d.ts +56 -0
- package/dist/board/{headless → export/node}/index.js +26 -21
- package/dist/board/export/node/scripts.d.ts +16 -0
- package/dist/board/export/node/scripts.js +258 -0
- package/dist/board/export/scene.d.ts +8 -5
- package/dist/board/export/scene.js +24 -9
- package/dist/board/{animation.d.ts → model/animation.d.ts} +8 -5
- package/dist/board/{animation.js → model/animation.js} +37 -10
- package/dist/board/{core → model}/arrow-geometry.d.ts +2 -2
- package/dist/board/{core → model}/arrow-geometry.js +2 -2
- package/dist/board/model/authoring.d.ts +20 -0
- package/dist/board/model/authoring.js +185 -0
- package/dist/board/{core → model}/draw-geometry.d.ts +2 -2
- package/dist/board/{core → model}/draw-geometry.js +1 -1
- package/dist/board/model/draw-input.d.ts +14 -0
- package/dist/board/model/draw-input.js +28 -0
- package/dist/board/{core → model}/export-assets.d.ts +1 -1
- package/dist/board/{core → model}/export-assets.js +1 -1
- package/dist/board/{core → model}/export-plan.d.ts +2 -2
- package/dist/board/{core → model}/export-plan.js +3 -2
- package/dist/board/{core → model}/file-preview.d.ts +1 -1
- package/dist/board/{core → model}/file-preview.js +2 -2
- package/dist/board/{core → model}/file-snapshot.d.ts +1 -1
- package/dist/board/{core → model}/file-snapshot.js +4 -3
- package/dist/board/{geometry.d.ts → model/geometry.d.ts} +3 -3
- package/dist/board/{geometry.js → model/geometry.js} +1 -1
- package/dist/board/{image-key.d.ts → model/image-key.d.ts} +2 -2
- package/dist/board/{image-key.js → model/image-key.js} +7 -3
- package/dist/board/model/index.d.ts +42 -0
- package/dist/board/model/index.js +39 -0
- package/dist/board/model/items/builtin.d.ts +5 -0
- package/dist/board/model/items/builtin.js +119 -0
- package/dist/board/model/items/create.d.ts +61 -0
- package/dist/board/model/items/create.js +272 -0
- package/dist/board/model/items/definition.d.ts +35 -0
- package/dist/board/model/items/definition.js +18 -0
- package/dist/board/model/items/id.d.ts +5 -0
- package/dist/board/model/items/id.js +11 -0
- package/dist/board/model/items/index.d.ts +6 -0
- package/dist/board/model/items/index.js +6 -0
- package/dist/board/model/items/registry.d.ts +35 -0
- package/dist/board/model/items/registry.js +84 -0
- package/dist/board/{media-playback.d.ts → model/media-playback.d.ts} +4 -3
- package/dist/board/{media-playback.js → model/media-playback.js} +15 -5
- package/dist/board/{media.d.ts → model/media.d.ts} +1 -1
- package/dist/board/{media.js → model/media.js} +8 -2
- package/dist/board/{core → model}/palette.d.ts +1 -1
- package/dist/board/{core → model}/palette.js +1 -1
- package/dist/board/{presets.d.ts → model/presets.d.ts} +3 -3
- package/dist/board/{presets.js → model/presets.js} +1 -1
- package/dist/board/{replay.d.ts → model/replay.d.ts} +5 -5
- package/dist/board/{replay.js → model/replay.js} +2 -2
- package/dist/board/model/sampling.d.ts +19 -0
- package/dist/board/model/sampling.js +96 -0
- package/dist/board/{core → model}/scene.d.ts +1 -1
- package/dist/board/{core → model}/scene.js +1 -1
- package/dist/board/model/script-example.d.ts +4 -0
- package/dist/board/model/script-example.js +21 -0
- package/dist/board/model/script-hit.d.ts +10 -0
- package/dist/board/model/script-hit.js +52 -0
- package/dist/board/model/script-index.d.ts +7 -0
- package/dist/board/model/script-index.js +15 -0
- package/dist/board/model/script-scene.d.ts +24 -0
- package/dist/board/model/script-scene.js +267 -0
- package/dist/board/model/script.d.ts +105 -0
- package/dist/board/model/script.js +1 -0
- package/dist/board/model/shape-types.d.ts +8 -0
- package/dist/board/model/shape-types.js +8 -0
- package/dist/board/{task.d.ts → model/task.d.ts} +4 -4
- package/dist/board/{task.js → model/task.js} +3 -3
- package/dist/board/{core → model}/text-metrics.d.ts +1 -1
- package/dist/board/{core → model}/text-metrics.js +1 -1
- package/dist/board/{core → model}/tool-styles.d.ts +1 -1
- package/dist/board/{core → model}/tool-styles.js +1 -1
- package/dist/board/{runtime/board-player.d.ts → player/index.d.ts} +2 -2
- package/dist/board/{runtime/board-player.js → player/index.js} +5 -4
- package/dist/board/render/board-background.d.ts +1 -1
- package/dist/board/render/clip.d.ts +1 -1
- package/dist/board/render/css-color.d.ts +6 -1
- package/dist/board/render/css-color.js +34 -20
- package/dist/board/render/diagnostics.d.ts +20 -0
- package/dist/board/render/diagnostics.js +117 -0
- package/dist/board/render/index.d.ts +9 -6
- package/dist/board/render/index.js +10 -7
- package/dist/board/render/media-interaction.d.ts +2 -2
- package/dist/board/render/media-interaction.js +1 -1
- package/dist/board/render/palette.d.ts +3 -2
- package/dist/board/render/palette.js +7 -3
- package/dist/board/render/renderers/arrow-card-renderer.js +4 -3
- package/dist/board/render/renderers/audio-card-renderer.js +2 -1
- package/dist/board/render/renderers/board-renderer-registry.d.ts +20 -10
- package/dist/board/render/renderers/board-renderer-registry.js +17 -17
- package/dist/board/render/renderers/custom-card-renderer.d.ts +5 -0
- package/dist/board/render/renderers/{sketch-card-renderer.js → custom-card-renderer.js} +16 -15
- package/dist/board/render/renderers/draw-card-renderer.js +4 -3
- package/dist/board/render/renderers/effect-card-renderer.js +22 -5
- package/dist/board/render/renderers/far-plate.js +1 -1
- package/dist/board/render/renderers/file-card-renderer.d.ts +1 -1
- package/dist/board/render/renderers/file-card-renderer.js +2 -2
- package/dist/board/render/renderers/frame-card-renderer.js +30 -14
- package/dist/board/render/renderers/image-card-renderer.d.ts +1 -1
- package/dist/board/render/renderers/image-card-renderer.js +43 -4
- package/dist/board/render/renderers/shape-card-renderer.js +11 -28
- package/dist/board/render/renderers/task-card-renderer.js +1 -1
- package/dist/board/render/renderers/text-card-renderer.js +6 -4
- package/dist/board/render/renderers/unknown-card-renderer.js +1 -0
- package/dist/board/render/renderers/video-card-renderer.d.ts +1 -1
- package/dist/board/render/renderers/video-card-renderer.js +2 -1
- package/dist/board/render/sampling.d.ts +22 -0
- package/dist/board/render/sampling.js +21 -0
- package/dist/board/render/script-export.d.ts +11 -0
- package/dist/board/render/script-export.js +86 -0
- package/dist/board/render/script-host.d.ts +31 -0
- package/dist/board/render/script-host.js +421 -0
- package/dist/board/render/script-modules.d.ts +2 -0
- package/dist/board/render/script-modules.js +2 -0
- package/dist/board/render/script-runtime.d.ts +29 -0
- package/dist/board/render/script-runtime.js +213 -0
- package/dist/board/render/script-sandbox.d.ts +4 -0
- package/dist/board/render/script-sandbox.js +173 -0
- package/dist/board/render/stroke.d.ts +3 -2
- package/dist/board/render/stroke.js +23 -2
- package/dist/board/render/text-measurement.js +2 -2
- package/dist/board/replica/index.d.ts +70 -0
- package/dist/board/replica/index.js +276 -0
- package/dist/board/stage/assets.d.ts +41 -0
- package/dist/board/stage/assets.js +355 -0
- package/dist/board/stage/index.d.ts +8 -0
- package/dist/board/stage/index.js +8 -0
- package/dist/board/stage/lru.d.ts +32 -0
- package/dist/board/stage/lru.js +29 -0
- package/dist/board/stage/maintenance.d.ts +5 -0
- package/dist/board/stage/maintenance.js +11 -0
- package/dist/board/stage/pointer.d.ts +8 -0
- package/dist/board/stage/pointer.js +33 -0
- package/dist/board/stage/scene.d.ts +85 -0
- package/dist/board/stage/scene.js +515 -0
- package/dist/board/stage/script-pointer.d.ts +19 -0
- package/dist/board/stage/script-pointer.js +35 -0
- package/dist/board/stage/stage.d.ts +76 -0
- package/dist/board/stage/stage.js +774 -0
- package/dist/board/stage/texture-pool.d.ts +24 -0
- package/dist/board/stage/texture-pool.js +153 -0
- package/dist/board/stage/views.d.ts +38 -0
- package/dist/board/stage/views.js +93 -0
- package/dist/chunks/environment.d.ts +289 -23
- package/dist/chunks/host-bridge.d.ts +2 -2
- package/dist/chunks/http.d.ts +185 -71
- package/dist/chunks/http.js +368 -269
- package/dist/chunks/transport.js +3 -1
- package/dist/chunks/websocket.d.ts +9 -1
- package/dist/chunks/websocket.js +16 -2
- package/dist/host-bridge.js +2 -1
- package/dist/http.d.ts +2 -2
- package/dist/index.d.ts +182 -4
- package/dist/index.js +1393 -129
- package/dist/media.d.ts +1 -10
- package/dist/media.js +16 -27
- package/dist/protocol/dist/board-assets.d.ts +1 -0
- package/dist/protocol/dist/board-constants.js +2 -2
- package/dist/protocol/dist/board-model.d.ts +201 -11
- package/dist/protocol/dist/board-model.js +33 -14
- package/dist/protocol/dist/board-patch.js +3 -2
- package/dist/protocol/dist/board-schema.d.ts +4 -2
- package/dist/protocol/dist/board-schema.js +18 -4
- package/dist/protocol/dist/board-script-modules.d.ts +25 -0
- package/dist/protocol/dist/board-script-modules.js +127 -0
- package/dist/protocol/dist/board.d.ts +28 -2
- package/dist/protocol/dist/board.js +3 -1
- package/dist/protocol/dist/core/media.d.ts +5 -0
- package/dist/protocol/dist/core/media.js +39 -0
- package/dist/protocol/dist/display/index.d.ts +1 -0
- package/dist/protocol/dist/index.d.ts +7 -5
- package/dist/protocol/dist/realtime/types.d.ts +1 -0
- package/dist/protocol/dist/rtc/index.d.ts +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +21 -8
- package/dist/board/core/shape-definition.d.ts +0 -23
- package/dist/board/core/shape-definition.js +0 -45
- package/dist/board/core/shape-types.d.ts +0 -38
- package/dist/board/core/shape-types.js +0 -22
- package/dist/board/headless/index.d.ts +0 -55
- package/dist/board/headless/sketch.d.ts +0 -19
- package/dist/board/headless/sketch.js +0 -146
- package/dist/board/index.d.ts +0 -30
- package/dist/board/index.js +0 -29
- package/dist/board/render/renderers/sketch-card-renderer.d.ts +0 -5
- package/dist/board/render/sketch-host.d.ts +0 -14
- package/dist/board/render/sketch-host.js +0 -216
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { BoardDocument } from "../../protocol/dist/board-model.js";
|
|
2
|
-
import "../../protocol/dist/index.js";
|
|
3
|
-
import { BoardSketchHost } from "../render/renderers/board-renderer-registry.js";
|
|
4
|
-
import { BoardExportOptions, BoardExportResult } from "../export/index.js";
|
|
5
|
-
import { createBoardHeadlessSketchHost } from "./sketch.js";
|
|
6
|
-
import { Renderer } from "pixi.js";
|
|
7
|
-
//#region src/board/headless/index.d.ts
|
|
8
|
-
type HeadlessCanvasModule = {
|
|
9
|
-
createCanvas: (width: number, height: number) => unknown;
|
|
10
|
-
Image: new () => unknown;
|
|
11
|
-
GlobalFonts: {
|
|
12
|
-
registerFromPath: (path: string, name?: string) => unknown;
|
|
13
|
-
has: (name: string) => boolean;
|
|
14
|
-
setAlias?: (fontName: string, alias: string) => boolean;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
type BoardHeadlessFont = {
|
|
18
|
-
path: string;
|
|
19
|
-
family?: string;
|
|
20
|
-
};
|
|
21
|
-
type BoardHeadlessRendererOptions = {
|
|
22
|
-
fonts?: BoardHeadlessFont[];
|
|
23
|
-
canvasModule?: HeadlessCanvasModule;
|
|
24
|
-
};
|
|
25
|
-
type BoardHeadlessTexture = {
|
|
26
|
-
readonly __boardTexture: unique symbol;
|
|
27
|
-
};
|
|
28
|
-
type BoardHeadlessRenderer = {
|
|
29
|
-
renderer: Renderer;
|
|
30
|
-
canvasModule: HeadlessCanvasModule;
|
|
31
|
-
decodeImage: (bytes: Uint8Array, mimeType?: string) => Promise<BoardHeadlessTexture>;
|
|
32
|
-
destroy: () => void;
|
|
33
|
-
};
|
|
34
|
-
declare function createBoardHeadlessRenderer(options?: BoardHeadlessRendererOptions): Promise<BoardHeadlessRenderer>;
|
|
35
|
-
type BoardHeadlessExportFormat = "png" | "jpeg" | "webp";
|
|
36
|
-
type BoardHeadlessExportOptions = Omit<BoardExportOptions, "textures" | "backgroundImage"> & {
|
|
37
|
-
textures?: Map<string, BoardHeadlessTexture>;
|
|
38
|
-
backgroundImage?: {
|
|
39
|
-
texture: BoardHeadlessTexture;
|
|
40
|
-
fit: "cover" | "contain" | "repeat";
|
|
41
|
-
position: "center" | "top" | "bottom" | "left" | "right";
|
|
42
|
-
opacity: number;
|
|
43
|
-
};
|
|
44
|
-
sketches?: BoardSketchHost;
|
|
45
|
-
format?: BoardHeadlessExportFormat;
|
|
46
|
-
quality?: number;
|
|
47
|
-
};
|
|
48
|
-
type BoardHeadlessExportResult = Omit<BoardExportResult, "canvas"> & {
|
|
49
|
-
bytes: Uint8Array;
|
|
50
|
-
format: BoardHeadlessExportFormat;
|
|
51
|
-
};
|
|
52
|
-
declare function boardHeadlessMimeType(format: BoardHeadlessExportFormat): string;
|
|
53
|
-
declare function exportBoardImageBytes(headless: BoardHeadlessRenderer, document: BoardDocument, options?: BoardHeadlessExportOptions): BoardHeadlessExportResult | null;
|
|
54
|
-
//#endregion
|
|
55
|
-
export { BoardHeadlessExportFormat, BoardHeadlessExportOptions, BoardHeadlessExportResult, BoardHeadlessFont, BoardHeadlessRenderer, BoardHeadlessRendererOptions, BoardHeadlessTexture, HeadlessCanvasModule, boardHeadlessMimeType, createBoardHeadlessRenderer, createBoardHeadlessSketchHost, exportBoardImageBytes };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BoardSketchItem } from "../../protocol/dist/board-model.js";
|
|
2
|
-
import "../../protocol/dist/index.js";
|
|
3
|
-
import { SceneItem } from "../core/scene.js";
|
|
4
|
-
import { BoardSketchHost } from "../render/renderers/board-renderer-registry.js";
|
|
5
|
-
import { BoardHeadlessRenderer } from "./index.js";
|
|
6
|
-
//#region src/board/headless/sketch.d.ts
|
|
7
|
-
type SketchFrame = SceneItem<BoardSketchItem>;
|
|
8
|
-
type PreparedSketchHost = BoardSketchHost & {
|
|
9
|
-
prepare: (items: readonly SketchFrame[], times: readonly number[], zoom: number) => Promise<void>;
|
|
10
|
-
destroy: () => void;
|
|
11
|
-
};
|
|
12
|
-
type BoardHeadlessSketchOptions = {
|
|
13
|
-
readModule: (src: string) => Promise<string>;
|
|
14
|
-
timeoutMs?: number;
|
|
15
|
-
readTimeoutMs?: number;
|
|
16
|
-
};
|
|
17
|
-
declare function createBoardHeadlessSketchHost(headless: BoardHeadlessRenderer, options: BoardHeadlessSketchOptions): PreparedSketchHost;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { BoardHeadlessSketchOptions, createBoardHeadlessSketchHost };
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { ImageSource, Texture } from "pixi.js";
|
|
2
|
-
import { Script, createContext } from "node:vm";
|
|
3
|
-
//#region src/board/headless/sketch.ts
|
|
4
|
-
const MAX_EDGE = 2048;
|
|
5
|
-
const DEFAULT_TIMEOUT_MS = 2e3;
|
|
6
|
-
const DEFAULT_READ_TIMEOUT_MS = 15e3;
|
|
7
|
-
const MAX_PREPARE_CONCURRENCY = 4;
|
|
8
|
-
function transformModule(code, src) {
|
|
9
|
-
return `(function(module, exports) {\n${code.replace(/export\s+default\s+/g, "module.exports.default = ").replace(/export\s+(async\s+)?function\s+draw\b/g, (_match, asyncKeyword = "") => `module.exports.draw = ${asyncKeyword}function draw`).replace(/export\s+(const|let|var)\s+draw\s*=/g, "module.exports.draw =")}\n})(module, module.exports);\n//# sourceURL=${JSON.stringify(src)}`;
|
|
10
|
-
}
|
|
11
|
-
function runModule(code, src, timeoutMs) {
|
|
12
|
-
const module = { exports: {} };
|
|
13
|
-
const context = createContext({
|
|
14
|
-
module,
|
|
15
|
-
exports: module.exports,
|
|
16
|
-
console: {
|
|
17
|
-
log() {},
|
|
18
|
-
warn() {},
|
|
19
|
-
error() {}
|
|
20
|
-
},
|
|
21
|
-
fetch: void 0,
|
|
22
|
-
XMLHttpRequest: void 0,
|
|
23
|
-
WebSocket: void 0,
|
|
24
|
-
EventSource: void 0,
|
|
25
|
-
importScripts: void 0,
|
|
26
|
-
indexedDB: void 0,
|
|
27
|
-
caches: void 0,
|
|
28
|
-
process: void 0,
|
|
29
|
-
require: void 0
|
|
30
|
-
});
|
|
31
|
-
new Script(transformModule(code, src), { filename: src }).runInContext(context, { timeout: timeoutMs });
|
|
32
|
-
const value = module.exports.default && typeof module.exports.default === "object" ? {
|
|
33
|
-
...module.exports.default,
|
|
34
|
-
...module.exports
|
|
35
|
-
} : module.exports;
|
|
36
|
-
if (typeof value.draw !== "function") throw new Error(`${src} does not export draw(ctx, frame)`);
|
|
37
|
-
if (value.draw.constructor?.name === "AsyncFunction") throw new Error(`${src} must export a synchronous draw(ctx, frame) for headless export.`);
|
|
38
|
-
return {
|
|
39
|
-
module: value,
|
|
40
|
-
context
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
function withTimeout(promise, timeoutMs, src) {
|
|
44
|
-
return new Promise((resolve, reject) => {
|
|
45
|
-
const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`${src} exceeded the ${timeoutMs}ms sketch timeout.`)), timeoutMs);
|
|
46
|
-
promise.then(resolve, reject).finally(() => clearTimeout(timer));
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
function frameKey(item, time, scale) {
|
|
50
|
-
return `${item.id}|${time}|${item.frame.width}|${item.frame.height}|${scale}|${item.props.seed ?? item.id}|${JSON.stringify(item.props.params)}`;
|
|
51
|
-
}
|
|
52
|
-
function frameScale(resolution, width, height) {
|
|
53
|
-
return Math.min(4, Math.max(.25, resolution), MAX_EDGE / Math.max(1, width), MAX_EDGE / Math.max(1, height));
|
|
54
|
-
}
|
|
55
|
-
function textureFromCanvas(canvas) {
|
|
56
|
-
return new Texture({ source: new ImageSource({
|
|
57
|
-
resource: canvas,
|
|
58
|
-
width: canvas.width,
|
|
59
|
-
height: canvas.height
|
|
60
|
-
}) });
|
|
61
|
-
}
|
|
62
|
-
function createBoardHeadlessSketchHost(headless, options) {
|
|
63
|
-
const textures = /* @__PURE__ */ new Map();
|
|
64
|
-
const errors = /* @__PURE__ */ new Map();
|
|
65
|
-
const lastErrors = /* @__PURE__ */ new Map();
|
|
66
|
-
const modules = /* @__PURE__ */ new Map();
|
|
67
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
68
|
-
const readTimeoutMs = options.readTimeoutMs ?? DEFAULT_READ_TIMEOUT_MS;
|
|
69
|
-
const loadModule = (src) => {
|
|
70
|
-
let pending = modules.get(src);
|
|
71
|
-
if (!pending) {
|
|
72
|
-
pending = withTimeout(options.readModule(src), readTimeoutMs, src).then((code) => runModule(code, src, timeoutMs));
|
|
73
|
-
modules.set(src, pending);
|
|
74
|
-
pending.catch(() => modules.delete(src));
|
|
75
|
-
}
|
|
76
|
-
return pending;
|
|
77
|
-
};
|
|
78
|
-
const render = async (item, time, scale) => {
|
|
79
|
-
const key = frameKey(item, time, scale);
|
|
80
|
-
if (textures.has(key) || errors.has(key)) return;
|
|
81
|
-
try {
|
|
82
|
-
const runtime = await loadModule(item.props.src);
|
|
83
|
-
const width = Math.max(1, Math.round(item.frame.width * scale));
|
|
84
|
-
const height = Math.max(1, Math.round(item.frame.height * scale));
|
|
85
|
-
const canvas = headless.canvasModule.createCanvas(width, height);
|
|
86
|
-
const context = canvas.getContext("2d");
|
|
87
|
-
context.scale(scale, scale);
|
|
88
|
-
const frame = {
|
|
89
|
-
...item.props,
|
|
90
|
-
t: time,
|
|
91
|
-
width: item.frame.width,
|
|
92
|
-
height: item.frame.height,
|
|
93
|
-
seed: item.props.seed ?? item.id
|
|
94
|
-
};
|
|
95
|
-
runtime.context.__boardDraw = runtime.module.draw;
|
|
96
|
-
runtime.context.__boardDrawContext = context;
|
|
97
|
-
runtime.context.__boardFrame = frame;
|
|
98
|
-
try {
|
|
99
|
-
const drawResult = new Script("__boardDraw(__boardDrawContext, __boardFrame)", { filename: item.props.src }).runInContext(runtime.context, { timeout: timeoutMs });
|
|
100
|
-
if (drawResult && typeof drawResult.then === "function") throw new Error(`${item.props.src} must export a synchronous draw(ctx, frame) for headless export.`);
|
|
101
|
-
} finally {
|
|
102
|
-
delete runtime.context.__boardDraw;
|
|
103
|
-
delete runtime.context.__boardDrawContext;
|
|
104
|
-
delete runtime.context.__boardFrame;
|
|
105
|
-
}
|
|
106
|
-
textures.set(key, textureFromCanvas(canvas));
|
|
107
|
-
lastErrors.delete(item.id);
|
|
108
|
-
} catch (error) {
|
|
109
|
-
errors.set(key, error instanceof Error ? error.message : String(error));
|
|
110
|
-
lastErrors.set(item.id, error instanceof Error ? error.message : String(error));
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
return {
|
|
114
|
-
frame(item, time, resolution) {
|
|
115
|
-
const scale = frameScale(resolution, item.frame.width, item.frame.height);
|
|
116
|
-
return textures.get(frameKey(item, time, scale)) ?? null;
|
|
117
|
-
},
|
|
118
|
-
error: (id) => lastErrors.get(id) ?? null,
|
|
119
|
-
release: () => {},
|
|
120
|
-
async prepare(items, times, zoom) {
|
|
121
|
-
const sketches = items.filter((item) => item.type === "sketch");
|
|
122
|
-
const jobs = [];
|
|
123
|
-
for (const item of sketches) {
|
|
124
|
-
const scale = frameScale(zoom, item.frame.width, item.frame.height);
|
|
125
|
-
for (const time of times) jobs.push(() => render(item, time, scale));
|
|
126
|
-
}
|
|
127
|
-
let next = 0;
|
|
128
|
-
const worker = async () => {
|
|
129
|
-
while (next < jobs.length) {
|
|
130
|
-
const job = jobs[next++];
|
|
131
|
-
if (job) await job();
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
await Promise.all(Array.from({ length: Math.min(MAX_PREPARE_CONCURRENCY, jobs.length) }, worker));
|
|
135
|
-
},
|
|
136
|
-
destroy() {
|
|
137
|
-
for (const texture of textures.values()) texture.destroy(true);
|
|
138
|
-
textures.clear();
|
|
139
|
-
errors.clear();
|
|
140
|
-
lastErrors.clear();
|
|
141
|
-
modules.clear();
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
//#endregion
|
|
146
|
-
export { createBoardHeadlessSketchHost };
|
package/dist/board/index.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SHAPE_GEOMETRIES, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrameItem, BoardFrameItemSchema, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemType, BoardKeyframe, BoardKeyframeSchema, BoardMarker, BoardMarkerSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardPatch, BoardPatchSchema, BoardPlayMode, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardSketchItem, BoardSketchItemSchema, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTrack, BoardTrackSchema, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem } from "../protocol/dist/board-model.js";
|
|
2
|
-
import { isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
|
|
3
|
-
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../protocol/dist/board-constants.js";
|
|
4
|
-
import { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout, BoardTextMeasurer, IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor } from "../protocol/dist/board-layout.js";
|
|
5
|
-
import { BoardApplyOptions, BoardPatchResult, BoardPropertySpec, BoardState, BoardValueKind, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "../protocol/dist/board-patch.js";
|
|
6
|
-
import { BOARD_SCHEMA_TARGETS, boardJsonSchema, boardSchemaOverview } from "../protocol/dist/board-schema.js";
|
|
7
|
-
import { isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../protocol/dist/board-url.js";
|
|
8
|
-
import "../protocol/dist/index.js";
|
|
9
|
-
import { BoardCameraOverride, BoardColorResolver, BoardEaseFunction, BoardEvaluateOptions, BoardEvaluation, CompiledAnimation, CompiledBoardAnimations, CompiledTrack, applyBoardEvaluation, boardAnimationTime, boardDocumentAt, boardEase, compileBoardAnimations, evaluateBoardAnimations, parseHexColor, sampleBoardTrack } from "./animation.js";
|
|
10
|
-
import { BoardCameraFit, BoardCameraFocus, BoardCameraState, BoardNormalizedPoint, BoardScreenOffset, BoardScreenPoint, BoardViewport, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CornerResizeHandle, EDGE_RESIZE_HANDLES, FIT_PADDING, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, ResizeHandle, ScreenPoint, Size, VIEWPORT_MARGIN_RATIO, WorldPoint, angleFromCenter, cameraForFocus, cameraForRect, cameraForState, clamp, clampZoom, degToRad, expandRect, fitToContent, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, handlePosition, itemBounds, normalizeRotation, normalizeViewport, normalizedPoint, panBy, pointToWorld, pointsBounds, radToDeg, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, resizeFrame, resizeFrameToSize, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, scaleFrames, screenOffset, screenPoint, screenToWorld, selectionBounds, stableCullRect, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
|
|
11
|
-
import { ARROW_BINDING_GAP, ArrowFrameLookup, ResolvedArrow, ResolvedArrowEnd, arrowHitRadius, arrowPathBounds, distanceToArrow, pathMidpoint, pathPointAt, resolveAnchor, resolveArrow, resolveSceneArrow } from "./core/arrow-geometry.js";
|
|
12
|
-
import { StrokeRibbonBuilder, StrokeRibbonGeometry, StrokeRibbonMesh, buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./core/draw-geometry.js";
|
|
13
|
-
import { BoardScene, BoardSceneItem, SceneItem, buildBoardScene, orderBoardItems, placeItem, refreshBoardScene, sceneItemToItem, sceneItemsToRecord, toSceneItem } from "./core/scene.js";
|
|
14
|
-
import { BOARD_EXPORT_MAX_TEXTURES, BoardExportAssetSelection, selectBoardExportAssets } from "./core/export-assets.js";
|
|
15
|
-
import { BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BoardExportPlan, BoardExportPlanInput, BoardExportRegion, exportItemBounds, normalizeBoardDocument, planBoardExport } from "./core/export-plan.js";
|
|
16
|
-
import { BoardFileSnapshotFacts, BuildSnapshotInput, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FileCategory, ResolvedCover, buildCodeExcerpt, buildFileExcerpt, buildFileSnapshot, fileBaseName, fileCategory, fileStem, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, resolveCoverRef, resolveFileTitle, resolveSpacePath, shouldFetchFileExcerpt, splitFrontmatter } from "./core/file-snapshot.js";
|
|
17
|
-
import { FileAvailability, FilePreviewKind, availabilityFromError, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, formatFileSize, isFileSnapshotFresh, mergeFileSnapshot } from "./core/file-preview.js";
|
|
18
|
-
import { BOARD_COLORS, BoardColorEntry, BoardColorId, BoardColorValue, BoardShapeColors, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor, resolveItemColor } from "./core/palette.js";
|
|
19
|
-
import { FULL_CAPABILITIES, HandleDragResult, SHAPE_KINDS, ShapeCapabilities, ShapeGeometry, ShapeHandle, ShapeHandleId, ShapeKind, ShapeResizeMode, isShapeKind, resizeModeForCapabilities } from "./core/shape-types.js";
|
|
20
|
-
import { ShapeDefinition, definitionForItem, getShapeDefinition, registerShapeDefinition, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, unknownShapeDefinition } from "./core/shape-definition.js";
|
|
21
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily } from "./core/text-metrics.js";
|
|
22
|
-
import { BoardStyledToolId, BoardToolStyleMap, BoardToolStylePatch, DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./core/tool-styles.js";
|
|
23
|
-
import { boardImageKeySource, imageAssetKey } from "./image-key.js";
|
|
24
|
-
import { BOARD_PRESET_NAMES, BoardNestedAnimationOptions, BoardPresetName, BoardPresetOptions, boardNestedAnimation, boardNestedAnimationTrack, boardPresetTracks, isBoardPresetName, listBoardPresets } from "./presets.js";
|
|
25
|
-
import { BoardMediaKind, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind } from "./media.js";
|
|
26
|
-
import { BoardAssetSource, BoardPlayableMedia, playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache } from "./media-playback.js";
|
|
27
|
-
import { BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
|
|
28
|
-
import { featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot } from "./task.js";
|
|
29
|
-
import { BoardPlayer, BoardPlayerFrame, createBoardPlayer, nextLocalPlayback, playbackTimeAt } from "./runtime/board-player.js";
|
|
30
|
-
export { ARROW_BINDING_GAP, ArrowFrameLookup, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardApplyOptions, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAssetSource, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardCameraFit, BoardCameraFocus, BoardCameraOverride, BoardCameraState, BoardColor, BoardColorEntry, BoardColorId, BoardColorResolver, BoardColorSchema, BoardColorToken, BoardColorValue, BoardCropSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseFunction, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardEvaluateOptions, BoardEvaluation, BoardExportAssetSelection, BoardExportPlan, BoardExportPlanInput, BoardExportRegion, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, type BoardFileSnapshotFacts, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemLookup, BoardItemType, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaKind, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardNestedAnimationOptions, BoardNormalizedPoint, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlayMode, BoardPlayableMedia, BoardPlayer, BoardPlayerFrame, BoardPresetName, BoardPresetOptions, BoardPropertySpec, BoardRect, BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, BoardScene, BoardSceneItem, BoardScreenOffset, BoardScreenPoint, BoardSettings, BoardSettingsSchema, BoardShapeColors, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardSketchItem, BoardSketchItemSchema, BoardState, BoardStyle, BoardStyleSchema, BoardStyledToolId, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardToolStyleMap, BoardToolStylePatch, BoardTrack, BoardTrackSchema, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, type BuildSnapshotInput, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CompiledAnimation, CompiledBoardAnimations, CompiledTrack, CornerResizeHandle, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, FileAvailability, type FileCategory, FilePreviewKind, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, HandleDragResult, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, ResizeHandle, ResolvedArrow, ResolvedArrowEnd, type ResolvedCover, SHAPE_KINDS, SceneItem, ScreenPoint, ShapeCapabilities, ShapeDefinition, ShapeGeometry, ShapeHandle, ShapeHandleId, ShapeKind, ShapeResizeMode, Size, StrokeRibbonBuilder, StrokeRibbonGeometry, StrokeRibbonMesh, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, WorldPoint, anchorPoint, angleFromCenter, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardPatchTouches, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, compileBoardAnimations, computeDrawBounds, createBoardLayout, createBoardPlayer, createBoardReplayPlayer, createBoardToolStyles, createDocumentLayout, createDocumentState, createStrokeRibbonBuilder, definitionForItem, degToRad, diffBoardDocuments, diffMergePatch, distanceToArrow, distanceToStroke, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, getShapeDefinition, handlePosition, hasAuthoredSize, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, listBoardPresets, listBoardProperties, mergeFileSnapshot, mergePatch, multiplyMatrix, nextLocalPlayback, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, orderBoardItems, panBy, parseBoardDocument, parseBoardItem, parseBoardManifest, parseHexColor, pathMidpoint, pathPointAt, pickBoardColor, placeItem, planBoardExport, playableBoardMedia, playableBoardMediaList, playbackTimeAt, pointToWorld, pointsBounds, pointsRect, pruneBoardTrack, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, refreshBoardScene, registerShapeDefinition, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resizeModeForCapabilities, resolveAnchor, resolveArrow, resolveBoardColor, resolveBoardProperty, resolveCoverRef, resolveFileTitle, resolveItemColor, resolveSceneArrow, resolveSpacePath, rotateAround, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleBoardTrack, sampleRadius, scaleFrames, scaleVector, sceneItemToItem, sceneItemsToRecord, screenOffset, screenPoint, screenToWorld, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextMeasurer, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot, toSceneItem, trackReferences, trimDrawPoints, unionRects, unknownShapeDefinition, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
|
package/dist/board/index.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../protocol/dist/board-constants.js";
|
|
2
|
-
import { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SHAPE_GEOMETRIES, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaSnapshotSchema, BoardPatchSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardSketchItemSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem } from "../protocol/dist/board-model.js";
|
|
3
|
-
import { isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
|
|
4
|
-
import { IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor } from "../protocol/dist/board-layout.js";
|
|
5
|
-
import { applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "../protocol/dist/board-patch.js";
|
|
6
|
-
import { BOARD_SCHEMA_TARGETS, boardJsonSchema, boardSchemaOverview } from "../protocol/dist/board-schema.js";
|
|
7
|
-
import { isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../protocol/dist/board-url.js";
|
|
8
|
-
import { applyBoardEvaluation, boardAnimationTime, boardDocumentAt, boardEase, compileBoardAnimations, evaluateBoardAnimations, parseHexColor, sampleBoardTrack } from "./animation.js";
|
|
9
|
-
import { CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, EDGE_RESIZE_HANDLES, FIT_PADDING, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, VIEWPORT_MARGIN_RATIO, angleFromCenter, cameraForFocus, cameraForRect, cameraForState, clamp, clampZoom, degToRad, expandRect, fitToContent, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, handlePosition, itemBounds, normalizeRotation, normalizeViewport, normalizedPoint, panBy, pointToWorld, pointsBounds, radToDeg, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, resizeFrame, resizeFrameToSize, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, scaleFrames, screenOffset, screenPoint, screenToWorld, selectionBounds, stableCullRect, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
|
|
10
|
-
import { featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot } from "./task.js";
|
|
11
|
-
import { boardImageKeySource, imageAssetKey } from "./image-key.js";
|
|
12
|
-
import { BOARD_PRESET_NAMES, boardNestedAnimation, boardNestedAnimationTrack, boardPresetTracks, isBoardPresetName, listBoardPresets } from "./presets.js";
|
|
13
|
-
import { ARROW_BINDING_GAP, arrowHitRadius, arrowPathBounds, distanceToArrow, pathMidpoint, pathPointAt, resolveAnchor, resolveArrow, resolveSceneArrow } from "./core/arrow-geometry.js";
|
|
14
|
-
import { buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./core/draw-geometry.js";
|
|
15
|
-
import { BOARD_EXPORT_MAX_TEXTURES, selectBoardExportAssets } from "./core/export-assets.js";
|
|
16
|
-
import { BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, exportItemBounds, normalizeBoardDocument, planBoardExport } from "./core/export-plan.js";
|
|
17
|
-
import { FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, buildCodeExcerpt, buildFileExcerpt, buildFileSnapshot, fileBaseName, fileCategory, fileStem, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, resolveCoverRef, resolveFileTitle, resolveSpacePath, shouldFetchFileExcerpt, splitFrontmatter } from "./core/file-snapshot.js";
|
|
18
|
-
import { availabilityFromError, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, formatFileSize, isFileSnapshotFresh, mergeFileSnapshot } from "./core/file-preview.js";
|
|
19
|
-
import { BOARD_COLORS, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor, resolveItemColor } from "./core/palette.js";
|
|
20
|
-
import { buildBoardScene, orderBoardItems, placeItem, refreshBoardScene, sceneItemToItem, sceneItemsToRecord, toSceneItem } from "./core/scene.js";
|
|
21
|
-
import { FULL_CAPABILITIES, SHAPE_KINDS, isShapeKind, resizeModeForCapabilities } from "./core/shape-types.js";
|
|
22
|
-
import { definitionForItem, getShapeDefinition, registerShapeDefinition, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, unknownShapeDefinition } from "./core/shape-definition.js";
|
|
23
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily } from "./core/text-metrics.js";
|
|
24
|
-
import { DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./core/tool-styles.js";
|
|
25
|
-
import { getMediaExtension, getMediaResourceTitle, inferBoardMediaKind } from "./media.js";
|
|
26
|
-
import { playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache } from "./media-playback.js";
|
|
27
|
-
import { boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
|
|
28
|
-
import { createBoardPlayer, nextLocalPlayback, playbackTimeAt } from "./runtime/board-player.js";
|
|
29
|
-
export { ARROW_BINDING_GAP, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaSnapshotSchema, BoardPatchSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardSketchItemSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, SHAPE_KINDS, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, anchorPoint, angleFromCenter, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardPatchTouches, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, compileBoardAnimations, computeDrawBounds, createBoardLayout, createBoardPlayer, createBoardReplayPlayer, createBoardToolStyles, createDocumentLayout, createDocumentState, createStrokeRibbonBuilder, definitionForItem, degToRad, diffBoardDocuments, diffMergePatch, distanceToArrow, distanceToStroke, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, getShapeDefinition, handlePosition, hasAuthoredSize, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, listBoardPresets, listBoardProperties, mergeFileSnapshot, mergePatch, multiplyMatrix, nextLocalPlayback, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, orderBoardItems, panBy, parseBoardDocument, parseBoardItem, parseBoardManifest, parseHexColor, pathMidpoint, pathPointAt, pickBoardColor, placeItem, planBoardExport, playableBoardMedia, playableBoardMediaList, playbackTimeAt, pointToWorld, pointsBounds, pointsRect, pruneBoardTrack, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, refreshBoardScene, registerShapeDefinition, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resizeModeForCapabilities, resolveAnchor, resolveArrow, resolveBoardColor, resolveBoardProperty, resolveCoverRef, resolveFileTitle, resolveItemColor, resolveSceneArrow, resolveSpacePath, rotateAround, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleBoardTrack, sampleRadius, scaleFrames, scaleVector, sceneItemToItem, sceneItemsToRecord, screenOffset, screenPoint, screenToWorld, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextMeasurer, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot, toSceneItem, trackReferences, trimDrawPoints, unionRects, unknownShapeDefinition, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BoardSketchHost } from "./renderers/board-renderer-registry.js";
|
|
2
|
-
//#region src/board/render/sketch-host.d.ts
|
|
3
|
-
type BoardSketchHostOptions = {
|
|
4
|
-
readModule: (src: string) => Promise<string>;
|
|
5
|
-
onFrame?: () => void;
|
|
6
|
-
timeoutMs?: number;
|
|
7
|
-
};
|
|
8
|
-
type BrowserBoardSketchHost = BoardSketchHost & {
|
|
9
|
-
invalidate: (src?: string) => void;
|
|
10
|
-
destroy: () => void;
|
|
11
|
-
};
|
|
12
|
-
declare function createBoardSketchHost(options: BoardSketchHostOptions): BrowserBoardSketchHost;
|
|
13
|
-
//#endregion
|
|
14
|
-
export { BoardSketchHostOptions, BrowserBoardSketchHost, createBoardSketchHost };
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import { Texture } from "pixi.js";
|
|
2
|
-
//#region src/board/render/sketch-host.ts
|
|
3
|
-
const MAX_EDGE = 2048;
|
|
4
|
-
const FRAME_SOURCE = `<!doctype html><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' blob:; worker-src blob:">
|
|
5
|
-
<script>
|
|
6
|
-
const workerUrl = URL.createObjectURL(new Blob([${JSON.stringify(`
|
|
7
|
-
const modules = new Map();
|
|
8
|
-
for (const name of ["fetch", "XMLHttpRequest", "WebSocket", "EventSource", "importScripts", "indexedDB", "caches"]) {
|
|
9
|
-
try { Object.defineProperty(self, name, { value: undefined, configurable: false }); } catch {}
|
|
10
|
-
}
|
|
11
|
-
self.onmessage = async (event) => {
|
|
12
|
-
const { id, src, code, t, width, height, scale, seed, params, request } = event.data;
|
|
13
|
-
try {
|
|
14
|
-
let entry = modules.get(id);
|
|
15
|
-
if (!entry || entry.code !== code) {
|
|
16
|
-
const url = URL.createObjectURL(new Blob([code], { type: "text/javascript" }));
|
|
17
|
-
try { entry = { code, module: await import(url) }; } finally { URL.revokeObjectURL(url); }
|
|
18
|
-
modules.set(id, entry);
|
|
19
|
-
}
|
|
20
|
-
if (typeof entry.module.draw !== "function") throw new Error(src + " does not export draw(ctx, frame)");
|
|
21
|
-
const canvas = new OffscreenCanvas(Math.max(1, Math.round(width * scale)), Math.max(1, Math.round(height * scale)));
|
|
22
|
-
const ctx = canvas.getContext("2d");
|
|
23
|
-
ctx.scale(scale, scale);
|
|
24
|
-
await entry.module.draw(ctx, { t, width, height, seed, params });
|
|
25
|
-
const bitmap = canvas.transferToImageBitmap();
|
|
26
|
-
self.postMessage({ id, request, bitmap }, [bitmap]);
|
|
27
|
-
} catch (error) {
|
|
28
|
-
self.postMessage({ id, request, error: String(error && error.message || error) });
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
`)}], { type: "text/javascript" }));
|
|
32
|
-
const makeWorker = () => {
|
|
33
|
-
const next = new Worker(workerUrl, { type: "module" });
|
|
34
|
-
next.onmessage = (event) => parent.postMessage(event.data, "*", event.data.bitmap ? [event.data.bitmap] : []);
|
|
35
|
-
return next;
|
|
36
|
-
};
|
|
37
|
-
let worker = makeWorker();
|
|
38
|
-
addEventListener("message", (event) => {
|
|
39
|
-
if (event.source !== parent) return;
|
|
40
|
-
if (event.data?.reset) {
|
|
41
|
-
worker.terminate();
|
|
42
|
-
worker = makeWorker();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
worker.postMessage(event.data);
|
|
46
|
-
});
|
|
47
|
-
parent.postMessage({ ready: true }, "*");
|
|
48
|
-
<\/script>`;
|
|
49
|
-
function frameKey(item, time, width, height, scale) {
|
|
50
|
-
return `${time}|${width}|${height}|${scale}|${item.props.seed ?? ""}|${JSON.stringify(item.props.params)}`;
|
|
51
|
-
}
|
|
52
|
-
function createBoardSketchHost(options) {
|
|
53
|
-
const timeoutMs = options.timeoutMs ?? 2e3;
|
|
54
|
-
const entries = /* @__PURE__ */ new Map();
|
|
55
|
-
const sources = /* @__PURE__ */ new Map();
|
|
56
|
-
const iframe = document.createElement("iframe");
|
|
57
|
-
iframe.setAttribute("sandbox", "allow-scripts");
|
|
58
|
-
iframe.setAttribute("aria-hidden", "true");
|
|
59
|
-
iframe.style.cssText = "position:fixed;width:0;height:0;border:0;visibility:hidden";
|
|
60
|
-
iframe.srcdoc = FRAME_SOURCE;
|
|
61
|
-
let ready = false;
|
|
62
|
-
const queue = [];
|
|
63
|
-
const post = (message) => {
|
|
64
|
-
if (ready) iframe.contentWindow?.postMessage(message, "*");
|
|
65
|
-
else queue.push(message);
|
|
66
|
-
};
|
|
67
|
-
const resetWorker = () => {
|
|
68
|
-
for (const entry of entries.values()) {
|
|
69
|
-
if (entry.pending === null) continue;
|
|
70
|
-
if (entry.timeout) clearTimeout(entry.timeout);
|
|
71
|
-
entry.timeout = null;
|
|
72
|
-
entry.pending = null;
|
|
73
|
-
entry.shown = "";
|
|
74
|
-
entry.request += 1;
|
|
75
|
-
}
|
|
76
|
-
post({ reset: true });
|
|
77
|
-
};
|
|
78
|
-
const onMessage = (event) => {
|
|
79
|
-
if (event.source !== iframe.contentWindow) return;
|
|
80
|
-
const data = event.data;
|
|
81
|
-
if (data.ready) {
|
|
82
|
-
ready = true;
|
|
83
|
-
for (const message of queue.splice(0)) iframe.contentWindow?.postMessage(message, "*");
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const entry = data.id ? entries.get(data.id) : void 0;
|
|
87
|
-
if (!entry || data.request !== entry.request) {
|
|
88
|
-
data.bitmap?.close();
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (data.bitmap) {
|
|
92
|
-
if (entry.timeout) clearTimeout(entry.timeout);
|
|
93
|
-
entry.timeout = null;
|
|
94
|
-
entry.texture?.destroy(true);
|
|
95
|
-
entry.texture = Texture.from(data.bitmap);
|
|
96
|
-
entry.error = null;
|
|
97
|
-
} else {
|
|
98
|
-
if (entry.timeout) clearTimeout(entry.timeout);
|
|
99
|
-
entry.timeout = null;
|
|
100
|
-
entry.error = data.error ?? "Sketch failed.";
|
|
101
|
-
}
|
|
102
|
-
entry.shown = entry.pending ?? entry.shown;
|
|
103
|
-
entry.pending = null;
|
|
104
|
-
options.onFrame?.();
|
|
105
|
-
};
|
|
106
|
-
window.addEventListener("message", onMessage);
|
|
107
|
-
document.body.appendChild(iframe);
|
|
108
|
-
function source(src) {
|
|
109
|
-
let promise = sources.get(src);
|
|
110
|
-
if (!promise) {
|
|
111
|
-
promise = options.readModule(src);
|
|
112
|
-
sources.set(src, promise);
|
|
113
|
-
promise.catch(() => sources.delete(src));
|
|
114
|
-
}
|
|
115
|
-
return promise;
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
frame(item, time, resolution) {
|
|
119
|
-
let entry = entries.get(item.id);
|
|
120
|
-
if (!entry) {
|
|
121
|
-
entry = {
|
|
122
|
-
texture: null,
|
|
123
|
-
error: null,
|
|
124
|
-
shown: "",
|
|
125
|
-
pending: null,
|
|
126
|
-
request: 0,
|
|
127
|
-
code: null,
|
|
128
|
-
loading: false,
|
|
129
|
-
timeout: null,
|
|
130
|
-
sourceError: null
|
|
131
|
-
};
|
|
132
|
-
entries.set(item.id, entry);
|
|
133
|
-
}
|
|
134
|
-
const { width, height } = item.frame;
|
|
135
|
-
const scale = Math.min(resolution, MAX_EDGE / Math.max(1, width), MAX_EDGE / Math.max(1, height));
|
|
136
|
-
const key = frameKey(item, time, width, height, scale);
|
|
137
|
-
if (key !== entry.shown && entry.pending === null) {
|
|
138
|
-
const current = entry;
|
|
139
|
-
if (current.code === null) {
|
|
140
|
-
if (!current.sourceError && !current.loading) {
|
|
141
|
-
current.loading = true;
|
|
142
|
-
source(item.props.src).then((code) => {
|
|
143
|
-
current.code = code;
|
|
144
|
-
current.sourceError = null;
|
|
145
|
-
current.loading = false;
|
|
146
|
-
options.onFrame?.();
|
|
147
|
-
}, (error) => {
|
|
148
|
-
current.loading = false;
|
|
149
|
-
current.sourceError = error instanceof Error ? error.message : String(error);
|
|
150
|
-
current.error = current.sourceError;
|
|
151
|
-
options.onFrame?.();
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
current.pending = key;
|
|
156
|
-
current.request += 1;
|
|
157
|
-
const request = current.request;
|
|
158
|
-
current.timeout = setTimeout(() => {
|
|
159
|
-
if (current.request !== request || current.pending !== key) return;
|
|
160
|
-
resetWorker();
|
|
161
|
-
current.shown = key;
|
|
162
|
-
current.pending = null;
|
|
163
|
-
current.timeout = null;
|
|
164
|
-
current.error = `${item.props.src} exceeded the ${timeoutMs}ms sketch timeout.`;
|
|
165
|
-
options.onFrame?.();
|
|
166
|
-
}, timeoutMs);
|
|
167
|
-
post({
|
|
168
|
-
id: item.id,
|
|
169
|
-
src: item.props.src,
|
|
170
|
-
code: current.code,
|
|
171
|
-
t: time,
|
|
172
|
-
width,
|
|
173
|
-
height,
|
|
174
|
-
scale,
|
|
175
|
-
seed: item.props.seed ?? item.id,
|
|
176
|
-
params: item.props.params,
|
|
177
|
-
request: current.request
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return entry.texture;
|
|
182
|
-
},
|
|
183
|
-
error: (id) => entries.get(id)?.error ?? null,
|
|
184
|
-
release(id) {
|
|
185
|
-
const entry = entries.get(id);
|
|
186
|
-
if (entry?.timeout) clearTimeout(entry.timeout);
|
|
187
|
-
entry?.texture?.destroy(true);
|
|
188
|
-
entries.delete(id);
|
|
189
|
-
},
|
|
190
|
-
invalidate(src) {
|
|
191
|
-
if (src) sources.delete(src);
|
|
192
|
-
else sources.clear();
|
|
193
|
-
for (const entry of entries.values()) {
|
|
194
|
-
entry.code = null;
|
|
195
|
-
entry.sourceError = null;
|
|
196
|
-
entry.pending = null;
|
|
197
|
-
entry.request += 1;
|
|
198
|
-
if (entry.timeout) clearTimeout(entry.timeout);
|
|
199
|
-
entry.timeout = null;
|
|
200
|
-
entry.shown = "";
|
|
201
|
-
}
|
|
202
|
-
options.onFrame?.();
|
|
203
|
-
},
|
|
204
|
-
destroy() {
|
|
205
|
-
window.removeEventListener("message", onMessage);
|
|
206
|
-
for (const entry of entries.values()) {
|
|
207
|
-
if (entry.timeout) clearTimeout(entry.timeout);
|
|
208
|
-
entry.texture?.destroy(true);
|
|
209
|
-
}
|
|
210
|
-
entries.clear();
|
|
211
|
-
iframe.remove();
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
//#endregion
|
|
216
|
-
export { createBoardSketchHost };
|