@neta-art/cohub 12.1.0 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/dist/board/editor/editor.d.ts +1 -0
- package/dist/board/editor/editor.js +4 -0
- package/dist/board/editor/snapshots.js +5 -57
- package/dist/board/export/index.d.ts +2 -2
- package/dist/board/export/node/fonts.js +4 -0
- package/dist/board/export/node/index.d.ts +3 -0
- package/dist/board/export/node/index.js +13 -1
- package/dist/board/export/scene.d.ts +2 -2
- package/dist/board/export/scene.js +2 -2
- package/dist/board/model/asset-key.d.ts +16 -0
- package/dist/board/model/asset-key.js +92 -0
- package/dist/board/model/export-assets.d.ts +7 -3
- package/dist/board/model/export-assets.js +34 -13
- package/dist/board/model/index.d.ts +7 -5
- package/dist/board/model/index.js +9 -7
- package/dist/board/model/items/create.js +1 -1
- package/dist/board/model/media-sizes.d.ts +28 -0
- package/dist/board/model/media-sizes.js +64 -0
- package/dist/board/model/palette.d.ts +1 -0
- package/dist/board/model/palette.js +20 -130
- package/dist/board/model/text-metrics.d.ts +8 -3
- package/dist/board/model/text-metrics.js +13 -2
- package/dist/board/model/themes.d.ts +488 -0
- package/dist/board/model/themes.js +495 -0
- package/dist/board/render/card-tag.js +2 -2
- package/dist/board/render/index.d.ts +6 -4
- package/dist/board/render/index.js +5 -3
- package/dist/board/render/lod.d.ts +22 -0
- package/dist/board/render/lod.js +27 -0
- package/dist/board/render/media-interaction.js +1 -1
- package/dist/board/render/palette.js +2 -25
- package/dist/board/render/renderers/audio-card-renderer.js +2 -1
- package/dist/board/render/renderers/board-renderer-registry.d.ts +10 -0
- package/dist/board/render/renderers/custom-card-renderer.js +5 -5
- package/dist/board/render/renderers/far-plate.d.ts +11 -1
- package/dist/board/render/renderers/far-plate.js +27 -8
- package/dist/board/render/renderers/file-card-renderer.js +3 -5
- package/dist/board/render/renderers/image-card-renderer.js +32 -6
- package/dist/board/render/renderers/model-card-renderer.js +1 -1
- package/dist/board/render/renderers/shape-card-renderer.js +25 -24
- package/dist/board/render/renderers/task-card-renderer.js +7 -8
- package/dist/board/render/renderers/text-card-renderer.js +86 -41
- package/dist/board/render/renderers/video-card-renderer.js +2 -1
- package/dist/board/render/style.d.ts +7 -2
- package/dist/board/render/style.js +5 -1
- package/dist/board/render/surface.d.ts +5 -0
- package/dist/board/render/surface.js +13 -3
- package/dist/board/render/text-fit.js +8 -12
- package/dist/board/render/text-measurement.d.ts +15 -1
- package/dist/board/render/text-measurement.js +113 -20
- package/dist/board/render/text-resolution.d.ts +1 -6
- package/dist/board/render/text-resolution.js +1 -10
- package/dist/board/render/theme.d.ts +15 -0
- package/dist/board/render/theme.js +15 -0
- package/dist/board/stage/assets.d.ts +15 -4
- package/dist/board/stage/assets.js +155 -89
- package/dist/board/stage/index.d.ts +5 -5
- package/dist/board/stage/index.js +4 -4
- package/dist/board/stage/lru.d.ts +13 -9
- package/dist/board/stage/lru.js +38 -20
- package/dist/board/stage/scene.d.ts +11 -1
- package/dist/board/stage/scene.js +213 -138
- package/dist/board/stage/stage.d.ts +12 -1
- package/dist/board/stage/stage.js +97 -24
- package/dist/board/stage/texture-pool.d.ts +8 -1
- package/dist/board/stage/texture-pool.js +37 -1
- package/dist/chunks/app-realtime.js +1 -1
- package/dist/chunks/{transport.js → http-error.js} +37 -1
- package/dist/chunks/http.js +30 -10
- package/dist/http.js +1 -1
- package/dist/index.js +139 -131
- package/dist/media.d.ts +3 -27
- package/dist/media.js +3 -82
- package/dist/protocol/dist/board-constants.js +3 -3
- package/dist/protocol/dist/board-layout.d.ts +17 -3
- package/dist/protocol/dist/board-layout.js +68 -11
- package/dist/protocol/dist/core/media.d.ts +35 -1
- package/dist/protocol/dist/core/media.js +123 -1
- package/dist/protocol/dist/index.d.ts +2 -2
- package/dist/websocket.js +951 -1
- package/package.json +3 -2
- package/dist/board/model/image-key.d.ts +0 -9
- package/dist/board/model/image-key.js +0 -33
- package/dist/chunks/websocket.js +0 -988
package/README.md
CHANGED
|
@@ -242,11 +242,14 @@ const renderer = await createNodeBoardRenderer();
|
|
|
242
242
|
const result = exportBoardImageBytes(renderer, document, { format: "png", scale: 2 });
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
Text
|
|
246
|
-
and
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
`
|
|
245
|
+
Text layout follows the same split. The renderers measure through a real canvas
|
|
246
|
+
and break lines where the browser breaks them in a `<textarea>`
|
|
247
|
+
(`white-space: pre-wrap; overflow-wrap: break-word`), so canvas, editor and
|
|
248
|
+
selection agree. Called straight off `@neta-art/cohub/board` with no renderer in
|
|
249
|
+
play, `layoutBoardText` estimates widths per character — fine for laying out a
|
|
250
|
+
board on a server; call `installBoardTextMeasurement` from `board/render` first
|
|
251
|
+
if the lines have to match what the editor draws. In a browser, call it again
|
|
252
|
+
when a web font Board text uses finishes loading (the stage does this itself).
|
|
250
253
|
|
|
251
254
|
## Session subscriptions
|
|
252
255
|
|
|
@@ -188,6 +188,7 @@ declare function createBoardEditor(options: BoardEditorOptions): {
|
|
|
188
188
|
commitTextEdit: (id: string, text: string) => void;
|
|
189
189
|
updateText: (id: string, text: string, created?: boolean) => void;
|
|
190
190
|
previewTextLayout: (id: string, text: string) => void;
|
|
191
|
+
relayoutText: () => void;
|
|
191
192
|
deleteSelection: () => void;
|
|
192
193
|
deleteItem: (id: string) => void;
|
|
193
194
|
duplicateSelection: () => void;
|
|
@@ -407,6 +407,10 @@ function createBoardEditor(options) {
|
|
|
407
407
|
commitTextEdit: creation.commitTextEdit,
|
|
408
408
|
updateText: creation.updateText,
|
|
409
409
|
previewTextLayout: creation.previewTextLayout,
|
|
410
|
+
relayoutText: () => {
|
|
411
|
+
const ids = state.scene.items.filter((item) => item.type === "text").map((item) => item.id);
|
|
412
|
+
if (ids.length > 0) document.rescene(ids);
|
|
413
|
+
},
|
|
410
414
|
deleteSelection: deletion.deleteSelection,
|
|
411
415
|
deleteItem: deletion.deleteItem,
|
|
412
416
|
duplicateSelection: copy.duplicateSelection,
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { featuredTaskArtifact } from "../../protocol/dist/board-task.js";
|
|
1
|
+
import { adoptBoardNaturalSize } from "../../protocol/dist/board-layout.js";
|
|
3
2
|
import { mergeFileSnapshot } from "../model/file-preview.js";
|
|
4
3
|
import { sameJson } from "../model/json.js";
|
|
5
4
|
//#region src/board/editor/snapshots.ts
|
|
6
|
-
function fitToNatural(item, natural) {
|
|
7
|
-
const size = fitBoardMediaSize(natural, Math.max(item.size.width, item.size.height));
|
|
8
|
-
if (!size) return null;
|
|
9
|
-
const anchor = item.type === "task" ? 0 : .5;
|
|
10
|
-
return {
|
|
11
|
-
...item,
|
|
12
|
-
position: {
|
|
13
|
-
x: item.position.x + (item.size.width - size.width) * anchor,
|
|
14
|
-
y: item.position.y + (item.size.height - size.height) * anchor
|
|
15
|
-
},
|
|
16
|
-
size
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
5
|
function createSnapshotsModule(ctx) {
|
|
20
6
|
const { state } = ctx;
|
|
21
7
|
const commit = (changes) => ctx.document.commitItems(changes, false);
|
|
@@ -43,48 +29,10 @@ function createSnapshotsModule(ctx) {
|
|
|
43
29
|
}
|
|
44
30
|
function adoptMediaNaturalSizes(sizes) {
|
|
45
31
|
const changes = /* @__PURE__ */ new Map();
|
|
46
|
-
for (const natural of sizes) {
|
|
47
|
-
const item = state.base.items[
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
naturalWidth: natural.width,
|
|
51
|
-
naturalHeight: natural.height
|
|
52
|
-
};
|
|
53
|
-
if (item.type === "task") {
|
|
54
|
-
const artifact = featuredTaskArtifact(item.props.snapshot.artifacts);
|
|
55
|
-
if (artifact?.type !== "image" && artifact?.type !== "video" || artifact.naturalWidth && artifact.naturalHeight) continue;
|
|
56
|
-
const fitted = fitToNatural(item, natural);
|
|
57
|
-
if (!fitted) continue;
|
|
58
|
-
const artifacts = item.props.snapshot.artifacts.map((entry) => entry.id === artifact.id ? {
|
|
59
|
-
...entry,
|
|
60
|
-
...dimensions
|
|
61
|
-
} : entry);
|
|
62
|
-
changes.set(natural.id, {
|
|
63
|
-
...fitted,
|
|
64
|
-
props: {
|
|
65
|
-
...item.props,
|
|
66
|
-
snapshot: {
|
|
67
|
-
...item.props.snapshot,
|
|
68
|
-
artifacts
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
if (item.type !== "image" && item.type !== "video") continue;
|
|
75
|
-
if (item.props.snapshot?.naturalWidth && item.props.snapshot.naturalHeight) continue;
|
|
76
|
-
const fitted = fitToNatural(item, natural);
|
|
77
|
-
if (!fitted) continue;
|
|
78
|
-
changes.set(natural.id, {
|
|
79
|
-
...fitted,
|
|
80
|
-
props: {
|
|
81
|
-
...item.props,
|
|
82
|
-
snapshot: {
|
|
83
|
-
...item.props.snapshot,
|
|
84
|
-
...dimensions
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
});
|
|
32
|
+
for (const { id, ...natural } of sizes) {
|
|
33
|
+
const item = state.base.items[id];
|
|
34
|
+
const adopted = item && adoptBoardNaturalSize(item, natural);
|
|
35
|
+
if (adopted) changes.set(id, adopted);
|
|
88
36
|
}
|
|
89
37
|
commit(changes);
|
|
90
38
|
}
|
|
@@ -6,7 +6,7 @@ import { BoardEvaluation } from "../model/animation.js";
|
|
|
6
6
|
import { BoardAnimationSampler } from "../model/sampling.js";
|
|
7
7
|
import { BoardExportPlan, BoardExportPlanInput, BoardExportRegion } from "../model/export-plan.js";
|
|
8
8
|
import { BoardShapeColors } from "../model/palette.js";
|
|
9
|
-
import {
|
|
9
|
+
import { BoardRenderStyleInput } from "../render/style.js";
|
|
10
10
|
import { BoardCardRendererResolver, BoardRenderPalette, BoardScriptHost } from "../render/renderers/board-renderer-registry.js";
|
|
11
11
|
import "../render/index.js";
|
|
12
12
|
import { BoardExportScene, BoardExportSceneInput, createBoardExportScene } from "./scene.js";
|
|
@@ -30,7 +30,7 @@ type BoardExportOptions = {
|
|
|
30
30
|
background?: BoardExportBackground;
|
|
31
31
|
palette?: Partial<BoardRenderPalette>;
|
|
32
32
|
colors?: BoardShapeColors;
|
|
33
|
-
style?:
|
|
33
|
+
style?: BoardRenderStyleInput;
|
|
34
34
|
textures?: Map<string, Texture>;
|
|
35
35
|
scripts?: BoardScriptHost;
|
|
36
36
|
assetKey?: (item: BoardSceneItem) => string | null;
|
|
@@ -3,6 +3,8 @@ function initializeBoardFonts(registry, fonts) {
|
|
|
3
3
|
for (const font of fonts) registry.registerFromPath(font.path, font.family);
|
|
4
4
|
if (!registry.setAlias) return;
|
|
5
5
|
for (const [alias, candidates] of Object.entries({
|
|
6
|
+
Geist: ["Geist Variable"],
|
|
7
|
+
"Geist Mono": ["Geist Mono Variable"],
|
|
6
8
|
"system-ui": [
|
|
7
9
|
"Noto Sans",
|
|
8
10
|
"DejaVu Sans",
|
|
@@ -13,6 +15,7 @@ function initializeBoardFonts(registry, fonts) {
|
|
|
13
15
|
"Segoe UI"
|
|
14
16
|
],
|
|
15
17
|
"sans-serif": [
|
|
18
|
+
"Geist Variable",
|
|
16
19
|
"Geist",
|
|
17
20
|
"Noto Sans",
|
|
18
21
|
"DejaVu Sans",
|
|
@@ -28,6 +31,7 @@ function initializeBoardFonts(registry, fonts) {
|
|
|
28
31
|
"Times New Roman"
|
|
29
32
|
],
|
|
30
33
|
monospace: [
|
|
34
|
+
"Geist Mono Variable",
|
|
31
35
|
"Geist Mono",
|
|
32
36
|
"DejaVu Sans Mono",
|
|
33
37
|
"Liberation Mono",
|
|
@@ -9,6 +9,7 @@ import { Renderer } from "pixi.js";
|
|
|
9
9
|
type NodeCanvasModule = {
|
|
10
10
|
createCanvas: (width: number, height: number) => unknown;
|
|
11
11
|
Image: new () => unknown;
|
|
12
|
+
DOMMatrix: new (init?: number[]) => unknown;
|
|
12
13
|
GlobalFonts: BoardFontRegistry;
|
|
13
14
|
};
|
|
14
15
|
type BoardNodeRendererOptions = {
|
|
@@ -17,6 +18,8 @@ type BoardNodeRendererOptions = {
|
|
|
17
18
|
};
|
|
18
19
|
type BoardNodeTexture = {
|
|
19
20
|
readonly __boardTexture: unique symbol;
|
|
21
|
+
readonly width: number;
|
|
22
|
+
readonly height: number;
|
|
20
23
|
destroy: (destroySource?: boolean) => void;
|
|
21
24
|
};
|
|
22
25
|
type BoardNodeRenderer = {
|
|
@@ -24,6 +24,16 @@ async function loadCanvasModule() {
|
|
|
24
24
|
throw new Error("Board image export needs the optional '@napi-rs/canvas' package. Install it with: npm i @napi-rs/canvas", { cause });
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
function installDOMMatrix(canvasModule) {
|
|
28
|
+
const globals = globalThis;
|
|
29
|
+
globals.DOMMatrix ??= canvasModule.DOMMatrix;
|
|
30
|
+
}
|
|
31
|
+
function installOffscreenCanvas() {
|
|
32
|
+
const globals = globalThis;
|
|
33
|
+
globals.OffscreenCanvas ??= function OffscreenCanvas(width, height) {
|
|
34
|
+
return DOMAdapter.get().createCanvas(width, height);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
27
37
|
function installAnimationFrameShim() {
|
|
28
38
|
const globals = globalThis;
|
|
29
39
|
if (globals.requestAnimationFrame) return () => {};
|
|
@@ -53,7 +63,7 @@ async function createNodeBoardRenderer(options = {}) {
|
|
|
53
63
|
extensions.add(CanvasGraphicsPipe, GraphicsPipe, CanvasGraphicsContextSystem, GraphicsContextSystem, CanvasRendererTextSystem, CanvasTextSystem, CanvasTextPipe);
|
|
54
64
|
const fonts = (options.fonts ?? []).map((font) => ({
|
|
55
65
|
...font,
|
|
56
|
-
family: font.family ?? "Geist"
|
|
66
|
+
family: font.family ?? "Geist Variable"
|
|
57
67
|
}));
|
|
58
68
|
initializeBoardFonts(canvasModule.GlobalFonts, fonts);
|
|
59
69
|
function createCanvas(width = 1, height = 1) {
|
|
@@ -78,6 +88,8 @@ async function createNodeBoardRenderer(options = {}) {
|
|
|
78
88
|
throw new Error("XML parsing is not available in Node board export.");
|
|
79
89
|
}
|
|
80
90
|
});
|
|
91
|
+
installDOMMatrix(canvasModule);
|
|
92
|
+
installOffscreenCanvas();
|
|
81
93
|
installBoardTextMeasurement();
|
|
82
94
|
const restoreAnimationFrame = installAnimationFrameShim();
|
|
83
95
|
const renderer = new CanvasRenderer();
|
|
@@ -3,7 +3,7 @@ import "../../protocol/dist/index.js";
|
|
|
3
3
|
import { Rect } from "../model/geometry.js";
|
|
4
4
|
import { BoardScene, BoardSceneItem } from "../model/scene.js";
|
|
5
5
|
import { BoardShapeColors } from "../model/palette.js";
|
|
6
|
-
import {
|
|
6
|
+
import { BoardRenderStyleInput } from "../render/style.js";
|
|
7
7
|
import { BoardCardRendererResolver, BoardRenderContext, BoardRenderPalette } from "../render/renderers/board-renderer-registry.js";
|
|
8
8
|
import "../render/index.js";
|
|
9
9
|
import { Container, Texture } from "pixi.js";
|
|
@@ -19,7 +19,7 @@ type BoardExportSceneInput = {
|
|
|
19
19
|
colorScheme: "dark" | "light";
|
|
20
20
|
palette?: Partial<BoardRenderPalette>;
|
|
21
21
|
colors?: BoardShapeColors;
|
|
22
|
-
style?:
|
|
22
|
+
style?: BoardRenderStyleInput;
|
|
23
23
|
textures?: Map<string, Texture>;
|
|
24
24
|
scripts?: BoardRenderContext["scripts"];
|
|
25
25
|
assetKey?: (item: BoardSceneItem) => string | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { boardAssetKey } from "../model/asset-key.js";
|
|
1
2
|
import { buildFallbackShapeColors } from "../model/palette.js";
|
|
2
|
-
import { imageAssetKey } from "../model/image-key.js";
|
|
3
3
|
import { defaultBoardPalette } from "../render/palette.js";
|
|
4
4
|
import { clippingAncestor, isClippingFrame, syncClipGroup } from "../render/clip.js";
|
|
5
5
|
import { DEFAULT_BOARD_RENDER_LABELS, getBoardCardRenderer } from "../render/renderers/board-renderer-registry.js";
|
|
@@ -34,7 +34,7 @@ function buildContext(input) {
|
|
|
34
34
|
labels: DEFAULT_BOARD_RENDER_LABELS,
|
|
35
35
|
taskRun: () => null,
|
|
36
36
|
scripts: input.scripts,
|
|
37
|
-
assetKey: input.assetKey ??
|
|
37
|
+
assetKey: input.assetKey ?? boardAssetKey,
|
|
38
38
|
getTexture: (key) => textures.get(key) ?? null,
|
|
39
39
|
hasError: (key) => {
|
|
40
40
|
if (!textures.has(key)) missing.add(key);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BoardSceneItem } from "./scene.js";
|
|
2
|
+
//#region src/board/model/asset-key.d.ts
|
|
3
|
+
type BoardAssetMedia = "image" | "video" | "model";
|
|
4
|
+
type BoardAssetKeySource = {
|
|
5
|
+
kind: "file" | "url";
|
|
6
|
+
media: BoardAssetMedia;
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
declare function imageAssetKey(item: BoardSceneItem): string | null;
|
|
10
|
+
declare function boardAssetKey(item: BoardSceneItem): string | null;
|
|
11
|
+
declare function boardAssetKeySource(key: string): BoardAssetKeySource | null;
|
|
12
|
+
declare function boardTexturePixels(item: BoardSceneItem, scale: number): number;
|
|
13
|
+
declare const BOARD_THUMBNAIL_EDGE = 64;
|
|
14
|
+
declare function boardTextureEdge(item: BoardSceneItem, scale: number): number;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { BOARD_THUMBNAIL_EDGE, BoardAssetKeySource, BoardAssetMedia, boardAssetKey, boardAssetKeySource, boardTextureEdge, boardTexturePixels, imageAssetKey };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { mediaVariantSize, videoFrameUrl } from "../../media.js";
|
|
2
|
+
import { parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
3
|
+
import { featuredTaskArtifact, taskArtifactPreviewUrl } from "../../protocol/dist/board-task.js";
|
|
4
|
+
import { isBoardModelItem } from "./media.js";
|
|
5
|
+
//#region src/board/model/asset-key.ts
|
|
6
|
+
function imageAssetKey(item) {
|
|
7
|
+
if (item.type === "image") {
|
|
8
|
+
const source = parseBoardMediaSource(item.props.src);
|
|
9
|
+
return source ? `${source.kind}:${source.value}` : null;
|
|
10
|
+
}
|
|
11
|
+
if (item.type === "file") {
|
|
12
|
+
const snapshot = item.props.snapshot;
|
|
13
|
+
if (snapshot?.coverUrl) return `url:${snapshot.coverUrl}`;
|
|
14
|
+
if (snapshot?.coverPath) return `file:${snapshot.coverPath}`;
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (item.type === "task") {
|
|
18
|
+
const url = taskArtifactPreviewUrl(featuredTaskArtifact(item.props.snapshot.artifacts));
|
|
19
|
+
return url ? `url:${url}` : null;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const STILL_MEDIA = ["video", "model"];
|
|
24
|
+
function stillKey(media, src, mtimeMs) {
|
|
25
|
+
const source = parseBoardMediaSource(src);
|
|
26
|
+
if (!source) return null;
|
|
27
|
+
return source.kind === "url" ? `${media}-url:${encodeURIComponent(source.value)}` : `${media}:${encodeURIComponent(source.value)}:${mtimeMs ?? "unknown"}`;
|
|
28
|
+
}
|
|
29
|
+
function taskPreviewKey(item) {
|
|
30
|
+
const artifact = featuredTaskArtifact(item.props.snapshot.artifacts);
|
|
31
|
+
const cover = taskArtifactPreviewUrl(artifact);
|
|
32
|
+
if (cover) return `url:${cover}`;
|
|
33
|
+
if (artifact?.type !== "video") return null;
|
|
34
|
+
const frame = videoFrameUrl(artifact.url, 768);
|
|
35
|
+
return frame ? `url:${frame}` : `video-url:${encodeURIComponent(artifact.url)}`;
|
|
36
|
+
}
|
|
37
|
+
function boardAssetKey(item) {
|
|
38
|
+
if (item.type === "task") return taskPreviewKey(item);
|
|
39
|
+
if (item.type === "video") return stillKey("video", item.props.src, item.props.snapshot?.mtimeMs);
|
|
40
|
+
if (item.type === "file" && isBoardModelItem(item)) return stillKey("model", item.props.src, item.props.snapshot?.mtimeMs);
|
|
41
|
+
return imageAssetKey(item);
|
|
42
|
+
}
|
|
43
|
+
function boardAssetKeySource(key) {
|
|
44
|
+
let base = key;
|
|
45
|
+
if (key.startsWith("local:")) {
|
|
46
|
+
const separator = key.indexOf(":", 6);
|
|
47
|
+
if (separator < 0) return null;
|
|
48
|
+
base = key.slice(separator + 1);
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
for (const media of STILL_MEDIA) {
|
|
52
|
+
if (base.startsWith(`${media}-url:`)) return {
|
|
53
|
+
kind: "url",
|
|
54
|
+
media,
|
|
55
|
+
value: decodeURIComponent(base.slice(media.length + 5))
|
|
56
|
+
};
|
|
57
|
+
if (base.startsWith(`${media}:`)) {
|
|
58
|
+
const end = base.lastIndexOf(":");
|
|
59
|
+
return end > media.length ? {
|
|
60
|
+
kind: "file",
|
|
61
|
+
media,
|
|
62
|
+
value: decodeURIComponent(base.slice(media.length + 1, end))
|
|
63
|
+
} : null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
} catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (base.startsWith("file:")) return {
|
|
70
|
+
kind: "file",
|
|
71
|
+
media: "image",
|
|
72
|
+
value: base.slice(5)
|
|
73
|
+
};
|
|
74
|
+
if (base.startsWith("url:")) return {
|
|
75
|
+
kind: "url",
|
|
76
|
+
media: "image",
|
|
77
|
+
value: base.slice(4)
|
|
78
|
+
};
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function boardTexturePixels(item, scale) {
|
|
82
|
+
const crop = item.type === "image" ? item.props.crop : void 0;
|
|
83
|
+
return Math.max(item.frame.width / (crop?.w || 1), item.frame.height / (crop?.h || 1)) * scale;
|
|
84
|
+
}
|
|
85
|
+
const BOARD_THUMBNAIL_EDGE = 64;
|
|
86
|
+
function boardTextureEdge(item, scale) {
|
|
87
|
+
const pixels = boardTexturePixels(item, scale);
|
|
88
|
+
if (pixels <= 64) return 64;
|
|
89
|
+
return pixels > 1536 ? Number.POSITIVE_INFINITY : mediaVariantSize(pixels);
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { BOARD_THUMBNAIL_EDGE, boardAssetKey, boardAssetKeySource, boardTextureEdge, boardTexturePixels, imageAssetKey };
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { BoardSceneItem } from "./scene.js";
|
|
2
2
|
//#region src/board/model/export-assets.d.ts
|
|
3
|
-
declare const
|
|
3
|
+
declare const BOARD_EXPORT_TEXTURE_BYTES: number;
|
|
4
4
|
type BoardExportAssetSelection = {
|
|
5
5
|
items: BoardSceneItem[];
|
|
6
6
|
keys: string[];
|
|
7
7
|
omittedKeys: string[];
|
|
8
8
|
};
|
|
9
|
-
declare function
|
|
9
|
+
declare function boardTextureBytes(item: BoardSceneItem, scale: number): number;
|
|
10
|
+
declare function selectBoardExportAssets(items: BoardSceneItem[], assetKey: (item: BoardSceneItem) => string | null, options: {
|
|
11
|
+
scale: number;
|
|
12
|
+
maxBytes?: number;
|
|
13
|
+
}): BoardExportAssetSelection;
|
|
10
14
|
//#endregion
|
|
11
|
-
export {
|
|
15
|
+
export { BOARD_EXPORT_TEXTURE_BYTES, BoardExportAssetSelection, boardTextureBytes, selectBoardExportAssets };
|
|
@@ -1,20 +1,41 @@
|
|
|
1
|
+
import { boardTextureEdge, boardTexturePixels } from "./asset-key.js";
|
|
1
2
|
//#region src/board/model/export-assets.ts
|
|
2
|
-
const
|
|
3
|
-
function
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
3
|
+
const BOARD_EXPORT_TEXTURE_BYTES = 256 * 1024 ** 2;
|
|
4
|
+
function boardTextureBytes(item, scale) {
|
|
5
|
+
const crop = item.type === "image" ? item.props.crop : void 0;
|
|
6
|
+
const pixels = boardTexturePixels(item, scale);
|
|
7
|
+
const edge = boardTextureEdge(item, scale);
|
|
8
|
+
const grow = Number.isFinite(edge) && pixels > 0 ? edge / pixels : 1;
|
|
9
|
+
return Math.ceil(item.frame.width / (crop?.w || 1) * scale * grow) * Math.ceil(item.frame.height / (crop?.h || 1) * scale * grow) * 4;
|
|
10
|
+
}
|
|
11
|
+
function selectBoardExportAssets(items, assetKey, options) {
|
|
12
|
+
const budget = options.maxBytes ?? BOARD_EXPORT_TEXTURE_BYTES;
|
|
13
|
+
const largest = /* @__PURE__ */ new Map();
|
|
7
14
|
for (const item of items) {
|
|
8
15
|
const key = assetKey(item);
|
|
9
|
-
if (!key
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
if (!key) continue;
|
|
17
|
+
const need = boardTextureBytes(item, options.scale);
|
|
18
|
+
if (need > (largest.get(key)?.need ?? -1)) largest.set(key, {
|
|
19
|
+
item,
|
|
20
|
+
need
|
|
21
|
+
});
|
|
12
22
|
}
|
|
13
|
-
|
|
14
|
-
items: [
|
|
15
|
-
keys: [
|
|
16
|
-
omittedKeys: [
|
|
23
|
+
const selection = {
|
|
24
|
+
items: [],
|
|
25
|
+
keys: [],
|
|
26
|
+
omittedKeys: []
|
|
17
27
|
};
|
|
28
|
+
let used = 0;
|
|
29
|
+
for (const [key, { item, need }] of largest) {
|
|
30
|
+
if (used + need > budget) {
|
|
31
|
+
selection.omittedKeys.push(key);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
used += need;
|
|
35
|
+
selection.keys.push(key);
|
|
36
|
+
selection.items.push(item);
|
|
37
|
+
}
|
|
38
|
+
return selection;
|
|
18
39
|
}
|
|
19
40
|
//#endregion
|
|
20
|
-
export {
|
|
41
|
+
export { BOARD_EXPORT_TEXTURE_BYTES, boardTextureBytes, selectBoardExportAssets };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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, BoardCustomItem, BoardCustomItemSchema, 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, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardMarker, BoardMarkerSchema, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchSchema, BoardPlayMode, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, 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, parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
2
|
-
import { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout,
|
|
2
|
+
import { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextFont, BoardTextLayout, BoardTextLayouter, BoardTextLines, IDENTITY_MATRIX, adoptBoardNaturalSize, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextLayouter, sideAnchor } from "../../protocol/dist/board-layout.js";
|
|
3
3
|
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";
|
|
4
4
|
import { isBoardPath, parseBoardManifest, serializeBoardManifest } from "../../protocol/dist/board.js";
|
|
5
5
|
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../../protocol/dist/board-constants.js";
|
|
@@ -23,16 +23,18 @@ import { BOARD_PRESET_NAMES, BoardNestedAnimationOptions, BoardPresetName, Board
|
|
|
23
23
|
import { ARROW_BINDING_GAP, ArrowFrameLookup, ResolvedArrow, ResolvedArrowEnd, arrowHitRadius, arrowPathBounds, distanceToArrow, pathMidpoint, pathPointAt, resolveAnchor, resolveArrow, resolveSceneArrow } from "./arrow-geometry.js";
|
|
24
24
|
import { StrokeRibbonBuilder, StrokeRibbonGeometry, StrokeRibbonMesh, buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./draw-geometry.js";
|
|
25
25
|
import { BoardDrawInputSample, appendBoardDrawSamples, quantizeDrawCoordinate } from "./draw-input.js";
|
|
26
|
-
import {
|
|
26
|
+
import { BOARD_EXPORT_TEXTURE_BYTES, BoardExportAssetSelection, boardTextureBytes, selectBoardExportAssets } from "./export-assets.js";
|
|
27
27
|
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 "./export-plan.js";
|
|
28
28
|
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 "./file-snapshot.js";
|
|
29
29
|
import { FileAvailability, FilePreviewKind, availabilityFromError, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, formatFileSize, isFileSnapshotFresh, mergeFileSnapshot } from "./file-preview.js";
|
|
30
30
|
import { BOARD_COLORS, BoardColorEntry, BoardColorId, BoardColorValue, BoardShapeColors, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor, resolveItemColor } from "./palette.js";
|
|
31
|
+
import { BOARD_THEME_IDS, BoardThemeId } from "./themes.js";
|
|
31
32
|
import { SHAPE_KINDS, ShapeKind, isShapeKind } from "./shape-types.js";
|
|
32
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily } from "./text-metrics.js";
|
|
33
|
+
import { SHAPE_LABEL_PADDING, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily, layoutShapeLabel } from "./text-metrics.js";
|
|
33
34
|
import { BoardStyledToolId, BoardToolStyleMap, BoardToolStylePatch, DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./tool-styles.js";
|
|
34
35
|
import { ClientToLocalInput, clientToLocal, elementClientToLocal } from "./client-geometry.js";
|
|
35
|
-
import {
|
|
36
|
+
import { BOARD_THUMBNAIL_EDGE, BoardAssetKeySource, BoardAssetMedia, boardAssetKey, boardAssetKeySource, boardTextureEdge, boardTexturePixels, imageAssetKey } from "./asset-key.js";
|
|
37
|
+
import { BoardMediaFileResolver, BoardMediaSize, BoardMediaSizeOptions, BoardMediaTarget, boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes } from "./media-sizes.js";
|
|
36
38
|
import { BoardItemCapabilities, BoardItemDefinition, BoardItemOf, BoardItemResizeMode, FULL_CAPABILITIES, defineBoardItem } from "./items/definition.js";
|
|
37
39
|
import { builtinBoardItems } from "./items/builtin.js";
|
|
38
40
|
import { BoardAppMetadata, BoardItemEntry, BoardMediaItemKind, boardItemOrigin, boardOriginKey, boardTaskCardSize, createAppBoardItem, createArrowBoardItem, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createTaskBoardItem, createTaskResultItems, createTextBoardItem, mediaFrameSize, titleForBoardItem } from "./items/create.js";
|
|
@@ -42,4 +44,4 @@ import "./items/index.js";
|
|
|
42
44
|
import { BoardMediaKind, boardModelFormat, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind, isBoardModelItem } from "./media.js";
|
|
43
45
|
import { BoardAssetSource, BoardAssetUrlOptions, BoardPlayableMedia, playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache, resolveBoardMediaUrl } from "./media-playback.js";
|
|
44
46
|
import { BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
|
|
45
|
-
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,
|
|
47
|
+
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_TEXTURE_BYTES, 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_SCRIPT_API, BOARD_SCRIPT_DRAWING_EXAMPLE, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BOARD_THEME_IDS, BOARD_THUMBNAIL_EDGE, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSampler, BoardAnimationSchema, BoardAppMetadata, BoardApplyOptions, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAssetKeySource, BoardAssetMedia, BoardAssetSource, BoardAssetUrlOptions, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardCameraFit, BoardCameraFocus, BoardCameraOverride, BoardCameraState, BoardChapter, BoardColor, BoardColorEntry, BoardColorId, BoardColorResolver, BoardColorSchema, BoardColorToken, BoardColorValue, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawInputSample, 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, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemLookup, BoardItemOf, BoardItemResizeMode, BoardItemType, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaFileResolver, BoardMediaItemKind, BoardMediaKind, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSize, BoardMediaSizeOptions, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardMediaTarget, BoardNestedAnimationOptions, BoardNormalizedPoint, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlacement, BoardPlayMode, BoardPlayableMedia, BoardPresetName, BoardPresetOptions, BoardPropertySpec, BoardRect, BoardRegistry, BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, BoardScene, BoardSceneItem, BoardScreenOffset, BoardScreenPoint, BoardScript, BoardScriptAnchor, BoardScriptContext, BoardScriptEvent, BoardScriptEventOf, BoardScriptFrame, BoardScriptHit, BoardScriptHostEvents, BoardScriptItemPatch, BoardScriptModule, BoardScriptOutput, BoardScriptParameter, BoardScriptSceneOptions, BoardScriptSchema, BoardScriptSnapshot, BoardScriptView, BoardSettings, BoardSettingsSchema, BoardShapeColors, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardStyledToolId, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, type BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextFont, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextLayouter, BoardTextLines, type BoardThemeId, BoardToolStyleMap, BoardToolStylePatch, BoardTrack, BoardTrackSchema, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, type BuildSnapshotInput, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, ClientToLocalInput, 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, 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, SHAPE_LABEL_PADDING, SceneItem, ScreenPoint, ShapeKind, 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, adoptBoardNaturalSize, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardAssetKey, boardAssetKeySource, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardItemOrigin, boardItemSchema, boardJsonSchema, boardMediaTarget, boardModelFormat, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskCardSize, boardTaskSource, boardTextureBytes, boardTextureEdge, boardTexturePixels, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, clientToLocal, compileBoardAnimations, composeBoardScriptItems, computeDrawBounds, createAppBoardItem, createArrowBoardItem, createBoardAnimationSampler, createBoardEntityId, createBoardItemId, createBoardLayout, createBoardRegistry, createBoardReplayPlayer, createBoardToolStyles, createDocumentLayout, createDocumentState, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createStrokeRibbonBuilder, createTaskBoardItem, createTaskResultItems, createTextBoardItem, defaultBoardRegistry, defineBoardItem, degToRad, diffBoardDocuments, diffMergePatch, distanceToArrow, distanceToStroke, drawPointsBounds, drawSampleRadius, elementClientToLocal, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitBoardMediaSize, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardModelItem, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, layoutShapeLabel, listBoardPresets, listBoardProperties, mediaFrameSize, mergeFileSnapshot, mergePatch, multiplyMatrix, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, orderBoardItems, panBy, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, parseHexColor, pathMidpoint, pathPointAt, pickBoardColor, placeBoardOverlay, placeItem, planBoardExport, playableBoardMedia, playableBoardMediaList, pointToWorld, pointsBounds, pointsRect, prepareBoardScriptOutput, probeBoardMediaSize, pruneBoardTrack, quantizeDrawCoordinate, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, refreshBoardScene, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resolveAnchor, resolveArrow, resolveBoardAnimationCamera, resolveBoardColor, resolveBoardMediaUrl, resolveBoardProperty, resolveBoardScriptHit, resolveCoverRef, resolveFileTitle, resolveItemColor, resolveSceneArrow, resolveSpacePath, rotateAround, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleBoardTrack, sampleRadius, scaleFrames, scaleVector, sceneItemToItem, sceneItemsToRecord, screenOffset, screenPoint, screenToWorld, scriptTemporaryPrefix, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextLayouter, settleBoardMediaSizes, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../../protocol/dist/board-constants.js";
|
|
2
2
|
import { isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../../protocol/dist/board-url.js";
|
|
3
3
|
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, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem, parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
4
|
-
import {
|
|
4
|
+
import { BOARD_TASK_SOURCE_PREFIX, boardTaskSource, featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, withObservedArtifactFacts } from "../../protocol/dist/board-task.js";
|
|
5
|
+
import { IDENTITY_MATRIX, adoptBoardNaturalSize, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextLayouter, sideAnchor } from "../../protocol/dist/board-layout.js";
|
|
5
6
|
import { applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "../../protocol/dist/board-patch.js";
|
|
6
7
|
import { isBoardPath, parseBoardManifest, serializeBoardManifest } from "../../protocol/dist/board.js";
|
|
7
8
|
import { BOARD_SCHEMA_TARGETS, boardJsonSchema, boardSchemaOverview } from "../../protocol/dist/board-schema.js";
|
|
8
|
-
import { BOARD_TASK_SOURCE_PREFIX, boardTaskSource, featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, withObservedArtifactFacts } from "../../protocol/dist/board-task.js";
|
|
9
9
|
import { placeBoardOverlay } from "./overlay-placement.js";
|
|
10
10
|
import { boardScriptItems, hasBoardScripts } from "./script-index.js";
|
|
11
11
|
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";
|
|
@@ -21,17 +21,19 @@ import { BOARD_PRESET_NAMES, boardNestedAnimation, boardNestedAnimationTrack, bo
|
|
|
21
21
|
import { ARROW_BINDING_GAP, arrowHitRadius, arrowPathBounds, distanceToArrow, pathMidpoint, pathPointAt, resolveAnchor, resolveArrow, resolveSceneArrow } from "./arrow-geometry.js";
|
|
22
22
|
import { buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./draw-geometry.js";
|
|
23
23
|
import { appendBoardDrawSamples, quantizeDrawCoordinate } from "./draw-input.js";
|
|
24
|
-
import { BOARD_EXPORT_MAX_TEXTURES, selectBoardExportAssets } from "./export-assets.js";
|
|
25
|
-
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 "./export-plan.js";
|
|
26
24
|
import { boardModelFormat, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind, isBoardModelItem } from "./media.js";
|
|
25
|
+
import { BOARD_THUMBNAIL_EDGE, boardAssetKey, boardAssetKeySource, boardTextureEdge, boardTexturePixels, imageAssetKey } from "./asset-key.js";
|
|
26
|
+
import { BOARD_EXPORT_TEXTURE_BYTES, boardTextureBytes, selectBoardExportAssets } from "./export-assets.js";
|
|
27
|
+
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 "./export-plan.js";
|
|
27
28
|
import { FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, buildCodeExcerpt, buildFileExcerpt, buildFileSnapshot, fileBaseName, fileCategory, fileStem, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, resolveCoverRef, resolveFileTitle, resolveSpacePath, shouldFetchFileExcerpt, splitFrontmatter } from "./file-snapshot.js";
|
|
28
29
|
import { availabilityFromError, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, formatFileSize, isFileSnapshotFresh, mergeFileSnapshot } from "./file-preview.js";
|
|
30
|
+
import { BOARD_THEME_IDS } from "./themes.js";
|
|
29
31
|
import { BOARD_COLORS, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor, resolveItemColor } from "./palette.js";
|
|
30
32
|
import { SHAPE_KINDS, isShapeKind } from "./shape-types.js";
|
|
31
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily } from "./text-metrics.js";
|
|
33
|
+
import { SHAPE_LABEL_PADDING, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily, layoutShapeLabel } from "./text-metrics.js";
|
|
32
34
|
import { DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./tool-styles.js";
|
|
33
35
|
import { clientToLocal, elementClientToLocal } from "./client-geometry.js";
|
|
34
|
-
import {
|
|
36
|
+
import { boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes } from "./media-sizes.js";
|
|
35
37
|
import { FULL_CAPABILITIES, defineBoardItem } from "./items/definition.js";
|
|
36
38
|
import { builtinBoardItems } from "./items/builtin.js";
|
|
37
39
|
import { createBoardEntityId, createBoardItemId } from "./items/id.js";
|
|
@@ -39,4 +41,4 @@ import { boardItemOrigin, boardOriginKey, boardTaskCardSize, createAppBoardItem,
|
|
|
39
41
|
import { createBoardRegistry, defaultBoardRegistry } from "./items/registry.js";
|
|
40
42
|
import { playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache, resolveBoardMediaUrl } from "./media-playback.js";
|
|
41
43
|
import { boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
|
|
42
|
-
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,
|
|
44
|
+
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_TEXTURE_BYTES, 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_SCRIPT_API, BOARD_SCRIPT_DRAWING_EXAMPLE, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BOARD_THEME_IDS, BOARD_THUMBNAIL_EDGE, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, 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, SHAPE_LABEL_PADDING, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, adoptBoardNaturalSize, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardAssetKey, boardAssetKeySource, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardItemOrigin, boardItemSchema, boardJsonSchema, boardMediaTarget, boardModelFormat, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskCardSize, boardTaskSource, boardTextureBytes, boardTextureEdge, boardTexturePixels, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, clientToLocal, compileBoardAnimations, composeBoardScriptItems, computeDrawBounds, createAppBoardItem, createArrowBoardItem, createBoardAnimationSampler, createBoardEntityId, createBoardItemId, createBoardLayout, createBoardRegistry, createBoardReplayPlayer, createBoardToolStyles, createDocumentLayout, createDocumentState, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createStrokeRibbonBuilder, createTaskBoardItem, createTaskResultItems, createTextBoardItem, defaultBoardRegistry, defineBoardItem, degToRad, diffBoardDocuments, diffMergePatch, distanceToArrow, distanceToStroke, drawPointsBounds, drawSampleRadius, elementClientToLocal, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitBoardMediaSize, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardModelItem, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, layoutShapeLabel, listBoardPresets, listBoardProperties, mediaFrameSize, mergeFileSnapshot, mergePatch, multiplyMatrix, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, orderBoardItems, panBy, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, parseHexColor, pathMidpoint, pathPointAt, pickBoardColor, placeBoardOverlay, placeItem, planBoardExport, playableBoardMedia, playableBoardMediaList, pointToWorld, pointsBounds, pointsRect, prepareBoardScriptOutput, probeBoardMediaSize, pruneBoardTrack, quantizeDrawCoordinate, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, refreshBoardScene, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resolveAnchor, resolveArrow, resolveBoardAnimationCamera, resolveBoardColor, resolveBoardMediaUrl, resolveBoardProperty, resolveBoardScriptHit, resolveCoverRef, resolveFileTitle, resolveItemColor, resolveSceneArrow, resolveSpacePath, rotateAround, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleBoardTrack, sampleRadius, scaleFrames, scaleVector, sceneItemToItem, sceneItemsToRecord, screenOffset, screenPoint, screenToWorld, scriptTemporaryPrefix, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextLayouter, settleBoardMediaSizes, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BOARD_DEFAULT_SIZES } from "../../../protocol/dist/board-constants.js";
|
|
2
2
|
import { BoardMediaOriginSchema, parseBoardItem } from "../../../protocol/dist/board-model.js";
|
|
3
|
-
import { fitBoardMediaSize, pointsRect } from "../../../protocol/dist/board-layout.js";
|
|
4
3
|
import { featuredTaskArtifact } from "../../../protocol/dist/board-task.js";
|
|
4
|
+
import { fitBoardMediaSize, pointsRect } from "../../../protocol/dist/board-layout.js";
|
|
5
5
|
import "../geometry.js";
|
|
6
6
|
import { quantizeDrawCoordinate } from "../draw-input.js";
|
|
7
7
|
import { boardModelFormat, getMediaResourceTitle, inferBoardMediaKind } from "../media.js";
|