@neta-art/cohub 12.1.1 → 12.3.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 +85 -8
- package/dist/board/editor/clipboard.js +1 -1
- package/dist/board/editor/creation.js +1 -1
- package/dist/board/editor/document.d.ts +3 -1
- package/dist/board/editor/document.js +8 -6
- package/dist/board/editor/editor.d.ts +8 -3
- package/dist/board/editor/editor.js +8 -2
- package/dist/board/editor/index.d.ts +3 -3
- package/dist/board/editor/index.js +2 -2
- package/dist/board/editor/interaction.d.ts +23 -2
- package/dist/board/editor/interaction.js +93 -4
- package/dist/board/editor/query.d.ts +1 -1
- package/dist/board/editor/query.js +3 -7
- package/dist/board/editor/selection.js +1 -1
- package/dist/board/editor/snapshots.js +5 -57
- package/dist/board/editor/tool.d.ts +4 -1
- package/dist/board/editor/tool.js +6 -1
- package/dist/board/export/index.d.ts +2 -2
- package/dist/board/export/index.js +1 -1
- package/dist/board/export/node/fonts.js +4 -0
- package/dist/board/export/node/index.d.ts +2 -0
- package/dist/board/export/node/index.js +8 -1
- package/dist/board/export/node/scripts.js +1 -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 +24 -0
- package/dist/board/model/asset-key.js +104 -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 +9 -7
- package/dist/board/model/index.js +22 -20
- package/dist/board/model/items/create.js +3 -3
- package/dist/board/model/items/definition.d.ts +9 -1
- package/dist/board/model/items/index.d.ts +2 -2
- package/dist/board/model/items/registry.d.ts +2 -1
- package/dist/board/model/items/registry.js +1 -0
- 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/sampling.js +1 -1
- package/dist/board/model/text-metrics.d.ts +28 -3
- package/dist/board/model/text-metrics.js +36 -2
- package/dist/board/model/themes.d.ts +495 -0
- package/dist/board/model/themes.js +500 -0
- package/dist/board/render/card-tag.js +2 -2
- package/dist/board/render/index.d.ts +11 -7
- package/dist/board/render/index.js +9 -5
- package/dist/board/render/labels.d.ts +15 -0
- package/dist/board/render/labels.js +14 -0
- package/dist/board/render/lod.d.ts +30 -0
- package/dist/board/render/lod.js +33 -0
- package/dist/board/render/media-interaction.d.ts +5 -2
- package/dist/board/render/media-interaction.js +15 -3
- package/dist/board/render/palette.js +2 -25
- package/dist/board/render/renderers/arrow-card-renderer.js +7 -5
- package/dist/board/render/renderers/audio-card-renderer.js +3 -2
- package/dist/board/render/renderers/board-renderer-registry.d.ts +22 -1
- package/dist/board/render/renderers/board-renderer-registry.js +9 -4
- package/dist/board/render/renderers/custom-card-renderer.js +5 -5
- package/dist/board/render/renderers/draw-card-renderer.js +1 -1
- package/dist/board/render/renderers/far-plate.d.ts +14 -1
- package/dist/board/render/renderers/far-plate.js +31 -8
- package/dist/board/render/renderers/file-card-renderer.js +49 -31
- package/dist/board/render/renderers/frame-card-renderer.js +9 -3
- package/dist/board/render/renderers/image-card-renderer.js +34 -8
- package/dist/board/render/renderers/model-card-renderer.js +6 -6
- package/dist/board/render/renderers/shape-card-renderer.js +25 -24
- package/dist/board/render/renderers/task-card-renderer.js +9 -10
- package/dist/board/render/renderers/text-card-renderer.js +86 -41
- package/dist/board/render/renderers/video-card-renderer.js +5 -4
- package/dist/board/render/script-export.js +1 -1
- package/dist/board/render/script-host.js +3 -3
- package/dist/board/render/style.d.ts +8 -2
- package/dist/board/render/style.js +8 -2
- package/dist/board/render/surface.d.ts +5 -0
- package/dist/board/render/surface.js +13 -3
- package/dist/board/render/text-edit.d.ts +32 -0
- package/dist/board/render/text-edit.js +134 -0
- package/dist/board/render/text-fit.d.ts +1 -3
- package/dist/board/render/text-fit.js +6 -49
- package/dist/board/render/text-measurement.d.ts +25 -1
- package/dist/board/render/text-measurement.js +157 -19
- 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/replica/index.d.ts +4 -2
- package/dist/board/replica/index.js +28 -17
- package/dist/board/replica/indexeddb.d.ts +16 -0
- package/dist/board/replica/indexeddb.js +155 -0
- package/dist/board/stage/assets.d.ts +28 -5
- package/dist/board/stage/assets.js +293 -102
- package/dist/board/stage/bench.d.ts +35 -0
- package/dist/board/stage/bench.js +153 -0
- package/dist/board/stage/device.d.ts +41 -0
- package/dist/board/stage/device.js +62 -0
- package/dist/board/stage/frame-budget.d.ts +19 -0
- package/dist/board/stage/frame-budget.js +69 -0
- package/dist/board/stage/idle.d.ts +4 -0
- package/dist/board/stage/idle.js +26 -0
- package/dist/board/stage/index.d.ts +11 -7
- package/dist/board/stage/index.js +7 -4
- package/dist/board/stage/lru.d.ts +13 -9
- package/dist/board/stage/lru.js +38 -20
- package/dist/board/stage/presses.d.ts +21 -0
- package/dist/board/stage/presses.js +66 -0
- package/dist/board/stage/scene.d.ts +15 -1
- package/dist/board/stage/scene.js +248 -141
- package/dist/board/stage/stage.d.ts +28 -2
- package/dist/board/stage/stage.js +404 -112
- package/dist/board/stage/texture-pool.d.ts +10 -1
- package/dist/board/stage/texture-pool.js +72 -2
- package/dist/chunks/environment.d.ts +6 -0
- package/dist/chunks/http.d.ts +9 -1
- package/dist/chunks/http.js +791 -4
- package/dist/index.d.ts +52 -1
- package/dist/index.js +202 -862
- 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/board-model.d.ts +15 -1
- package/dist/protocol/dist/board-model.js +12 -2
- package/dist/protocol/dist/board-patch.js +1 -1
- package/dist/protocol/dist/board-schema.d.ts +2 -1
- package/dist/protocol/dist/board-schema.js +4 -1
- package/dist/protocol/dist/core/media.d.ts +35 -1
- package/dist/protocol/dist/core/media.js +127 -1
- package/dist/protocol/dist/index.d.ts +3 -3
- package/package.json +4 -2
- package/dist/board/model/image-key.d.ts +0 -9
- package/dist/board/model/image-key.js +0 -33
|
@@ -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
|
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
//#region src/board/editor/tool.d.ts
|
|
2
2
|
type BoardToolId = "select" | "hand" | "text" | "shape" | "draw" | "arrow" | "frame";
|
|
3
3
|
declare const BOARD_HAND_TAP_SLOP = 8;
|
|
4
|
+
declare const BOARD_MOUSE_TAP_SLOP = 4;
|
|
5
|
+
declare const BOARD_TAP_MAX_MS = 300;
|
|
6
|
+
declare function boardTapSlop(pointerType: string): number;
|
|
4
7
|
declare function defaultBoardTool(isMobile: boolean): BoardToolId;
|
|
5
8
|
declare function canTapSelectWithHand(pointerType: string): boolean;
|
|
6
9
|
declare function isWithinHandTapSlop(dx: number, dy: number): boolean;
|
|
7
10
|
declare function isContinuousBoardTool(tool: BoardToolId): boolean;
|
|
8
11
|
declare function isCreationBoardTool(tool: BoardToolId): boolean;
|
|
9
12
|
//#endregion
|
|
10
|
-
export { BOARD_HAND_TAP_SLOP, BoardToolId, canTapSelectWithHand, defaultBoardTool, isContinuousBoardTool, isCreationBoardTool, isWithinHandTapSlop };
|
|
13
|
+
export { BOARD_HAND_TAP_SLOP, BOARD_MOUSE_TAP_SLOP, BOARD_TAP_MAX_MS, BoardToolId, boardTapSlop, canTapSelectWithHand, defaultBoardTool, isContinuousBoardTool, isCreationBoardTool, isWithinHandTapSlop };
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
//#region src/board/editor/tool.ts
|
|
2
2
|
const BOARD_HAND_TAP_SLOP = 8;
|
|
3
|
+
const BOARD_MOUSE_TAP_SLOP = 4;
|
|
4
|
+
const BOARD_TAP_MAX_MS = 300;
|
|
5
|
+
function boardTapSlop(pointerType) {
|
|
6
|
+
return pointerType === "mouse" ? 4 : 8;
|
|
7
|
+
}
|
|
3
8
|
function defaultBoardTool(isMobile) {
|
|
4
9
|
return isMobile ? "hand" : "select";
|
|
5
10
|
}
|
|
@@ -16,4 +21,4 @@ function isCreationBoardTool(tool) {
|
|
|
16
21
|
return tool === "text" || tool === "shape" || tool === "draw" || tool === "arrow" || tool === "frame";
|
|
17
22
|
}
|
|
18
23
|
//#endregion
|
|
19
|
-
export { BOARD_HAND_TAP_SLOP, canTapSelectWithHand, defaultBoardTool, isContinuousBoardTool, isCreationBoardTool, isWithinHandTapSlop };
|
|
24
|
+
export { BOARD_HAND_TAP_SLOP, BOARD_MOUSE_TAP_SLOP, BOARD_TAP_MAX_MS, boardTapSlop, canTapSelectWithHand, defaultBoardTool, isContinuousBoardTool, isCreationBoardTool, isWithinHandTapSlop };
|
|
@@ -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;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { buildBoardScene } from "../model/scene.js";
|
|
2
2
|
import { resolveBoardAnimationCamera } from "../model/sampling.js";
|
|
3
|
-
import { normalizeBoardDocument, planBoardExport } from "../model/export-plan.js";
|
|
4
3
|
import { parseBoardCssColor } from "../render/css-color.js";
|
|
5
4
|
import { defaultBoardPalette } from "../render/palette.js";
|
|
6
5
|
import { createBoardRenderSampler } from "../render/sampling.js";
|
|
6
|
+
import { normalizeBoardDocument, planBoardExport } from "../model/export-plan.js";
|
|
7
7
|
import { ensureBoardTextMeasurement } from "../render/text-measurement.js";
|
|
8
8
|
import { createBoardExportScene } from "./scene.js";
|
|
9
9
|
import { Rectangle, RendererType } from "pixi.js";
|
|
@@ -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",
|
|
@@ -28,6 +28,12 @@ function installDOMMatrix(canvasModule) {
|
|
|
28
28
|
const globals = globalThis;
|
|
29
29
|
globals.DOMMatrix ??= canvasModule.DOMMatrix;
|
|
30
30
|
}
|
|
31
|
+
function installOffscreenCanvas() {
|
|
32
|
+
const globals = globalThis;
|
|
33
|
+
globals.OffscreenCanvas ??= function OffscreenCanvas(width, height) {
|
|
34
|
+
return DOMAdapter.get().createCanvas(width, height);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
31
37
|
function installAnimationFrameShim() {
|
|
32
38
|
const globals = globalThis;
|
|
33
39
|
if (globals.requestAnimationFrame) return () => {};
|
|
@@ -57,7 +63,7 @@ async function createNodeBoardRenderer(options = {}) {
|
|
|
57
63
|
extensions.add(CanvasGraphicsPipe, GraphicsPipe, CanvasGraphicsContextSystem, GraphicsContextSystem, CanvasRendererTextSystem, CanvasTextSystem, CanvasTextPipe);
|
|
58
64
|
const fonts = (options.fonts ?? []).map((font) => ({
|
|
59
65
|
...font,
|
|
60
|
-
family: font.family ?? "Geist"
|
|
66
|
+
family: font.family ?? "Geist Variable"
|
|
61
67
|
}));
|
|
62
68
|
initializeBoardFonts(canvasModule.GlobalFonts, fonts);
|
|
63
69
|
function createCanvas(width = 1, height = 1) {
|
|
@@ -83,6 +89,7 @@ async function createNodeBoardRenderer(options = {}) {
|
|
|
83
89
|
}
|
|
84
90
|
});
|
|
85
91
|
installDOMMatrix(canvasModule);
|
|
92
|
+
installOffscreenCanvas();
|
|
86
93
|
installBoardTextMeasurement();
|
|
87
94
|
const restoreAnimationFrame = installAnimationFrameShim();
|
|
88
95
|
const renderer = new CanvasRenderer();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { boardScriptScope, composeBoardScriptItems } from "../../model/script-scene.js";
|
|
2
1
|
import { buildBoardScene } from "../../model/scene.js";
|
|
2
|
+
import { boardScriptScope, composeBoardScriptItems } from "../../model/script-scene.js";
|
|
3
3
|
import { createBoardScriptModuleReader, loadBoardScriptSources } from "../../../protocol/dist/board-script-modules.js";
|
|
4
4
|
import { createScriptRuntime } from "../../render/script-runtime.js";
|
|
5
5
|
import { initializeBoardFonts } from "./fonts.js";
|
|
@@ -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,9 +1,9 @@
|
|
|
1
1
|
import { buildFallbackShapeColors } from "../model/palette.js";
|
|
2
|
-
import { imageAssetKey } from "../model/image-key.js";
|
|
3
2
|
import { defaultBoardPalette } from "../render/palette.js";
|
|
4
3
|
import { clippingAncestor, isClippingFrame, syncClipGroup } from "../render/clip.js";
|
|
5
4
|
import { DEFAULT_BOARD_RENDER_LABELS, getBoardCardRenderer } from "../render/renderers/board-renderer-registry.js";
|
|
6
5
|
import { resolveBoardRenderStyle } from "../render/style.js";
|
|
6
|
+
import { boardAssetKey } from "../model/asset-key.js";
|
|
7
7
|
import { Container, Graphics, Sprite, TilingSprite } from "pixi.js";
|
|
8
8
|
//#region src/board/export/scene.ts
|
|
9
9
|
function buildContext(input) {
|
|
@@ -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,24 @@
|
|
|
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
|
+
fit?: "cover";
|
|
9
|
+
};
|
|
10
|
+
/** `fit` applies to images: `cover` bounds the short edge instead of the long one. */
|
|
11
|
+
type BoardAssetRef = {
|
|
12
|
+
url: string;
|
|
13
|
+
media?: "image" | "video";
|
|
14
|
+
fit?: "contain" | "cover";
|
|
15
|
+
};
|
|
16
|
+
declare function boardAssetRefKey({ url, media, fit }: BoardAssetRef): string;
|
|
17
|
+
declare function imageAssetKey(item: BoardSceneItem): string | null;
|
|
18
|
+
declare function boardAssetKey(item: BoardSceneItem): string | null;
|
|
19
|
+
declare function boardAssetKeySource(key: string): BoardAssetKeySource | null;
|
|
20
|
+
declare function boardTexturePixels(item: BoardSceneItem, scale: number): number;
|
|
21
|
+
declare const BOARD_THUMBNAIL_EDGE = 64;
|
|
22
|
+
declare function boardTextureEdge(item: BoardSceneItem, scale: number): number;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { BOARD_THUMBNAIL_EDGE, BoardAssetKeySource, BoardAssetMedia, BoardAssetRef, boardAssetKey, boardAssetKeySource, boardAssetRefKey, boardTextureEdge, boardTexturePixels, imageAssetKey };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { mediaVariantSize, videoFrameUrl } from "../../media.js";
|
|
2
|
+
import { boardItemPreview, 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 boardAssetRefKey({ url, media = "image", fit }) {
|
|
7
|
+
if (media === "video") return `video-url:${encodeURIComponent(url)}`;
|
|
8
|
+
return fit === "cover" ? `cover-url:${url}` : `url:${url}`;
|
|
9
|
+
}
|
|
10
|
+
function imageAssetKey(item) {
|
|
11
|
+
if (item.type === "image") {
|
|
12
|
+
const source = parseBoardMediaSource(item.props.src);
|
|
13
|
+
return source ? `${source.kind}:${source.value}` : null;
|
|
14
|
+
}
|
|
15
|
+
if (item.type === "file") {
|
|
16
|
+
const snapshot = item.props.snapshot;
|
|
17
|
+
if (snapshot?.coverUrl) return `url:${snapshot.coverUrl}`;
|
|
18
|
+
if (snapshot?.coverPath) return `file:${snapshot.coverPath}`;
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (item.type === "task") {
|
|
22
|
+
const url = taskArtifactPreviewUrl(featuredTaskArtifact(item.props.snapshot.artifacts));
|
|
23
|
+
return url ? `url:${url}` : null;
|
|
24
|
+
}
|
|
25
|
+
const cover = boardItemPreview(item)?.cover;
|
|
26
|
+
const source = cover ? parseBoardMediaSource(cover) : null;
|
|
27
|
+
return source ? `${source.kind}:${source.value}` : null;
|
|
28
|
+
}
|
|
29
|
+
const STILL_MEDIA = ["video", "model"];
|
|
30
|
+
function stillKey(media, src, mtimeMs) {
|
|
31
|
+
const source = parseBoardMediaSource(src);
|
|
32
|
+
if (!source) return null;
|
|
33
|
+
return source.kind === "url" ? `${media}-url:${encodeURIComponent(source.value)}` : `${media}:${encodeURIComponent(source.value)}:${mtimeMs ?? "unknown"}`;
|
|
34
|
+
}
|
|
35
|
+
function taskPreviewKey(item) {
|
|
36
|
+
const artifact = featuredTaskArtifact(item.props.snapshot.artifacts);
|
|
37
|
+
const cover = taskArtifactPreviewUrl(artifact);
|
|
38
|
+
if (cover) return `url:${cover}`;
|
|
39
|
+
if (artifact?.type !== "video") return null;
|
|
40
|
+
const frame = videoFrameUrl(artifact.url, 768);
|
|
41
|
+
return frame ? `url:${frame}` : `video-url:${encodeURIComponent(artifact.url)}`;
|
|
42
|
+
}
|
|
43
|
+
function boardAssetKey(item) {
|
|
44
|
+
if (item.type === "task") return taskPreviewKey(item);
|
|
45
|
+
if (item.type === "video") return stillKey("video", item.props.src, item.props.snapshot?.mtimeMs);
|
|
46
|
+
if (item.type === "file" && isBoardModelItem(item)) return stillKey("model", item.props.src, item.props.snapshot?.mtimeMs);
|
|
47
|
+
return imageAssetKey(item);
|
|
48
|
+
}
|
|
49
|
+
function boardAssetKeySource(key) {
|
|
50
|
+
let base = key;
|
|
51
|
+
if (key.startsWith("local:")) {
|
|
52
|
+
const separator = key.indexOf(":", 6);
|
|
53
|
+
if (separator < 0) return null;
|
|
54
|
+
base = key.slice(separator + 1);
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
for (const media of STILL_MEDIA) {
|
|
58
|
+
if (base.startsWith(`${media}-url:`)) return {
|
|
59
|
+
kind: "url",
|
|
60
|
+
media,
|
|
61
|
+
value: decodeURIComponent(base.slice(media.length + 5))
|
|
62
|
+
};
|
|
63
|
+
if (base.startsWith(`${media}:`)) {
|
|
64
|
+
const end = base.lastIndexOf(":");
|
|
65
|
+
return end > media.length ? {
|
|
66
|
+
kind: "file",
|
|
67
|
+
media,
|
|
68
|
+
value: decodeURIComponent(base.slice(media.length + 1, end))
|
|
69
|
+
} : null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (base.startsWith("file:")) return {
|
|
76
|
+
kind: "file",
|
|
77
|
+
media: "image",
|
|
78
|
+
value: base.slice(5)
|
|
79
|
+
};
|
|
80
|
+
if (base.startsWith("url:")) return {
|
|
81
|
+
kind: "url",
|
|
82
|
+
media: "image",
|
|
83
|
+
value: base.slice(4)
|
|
84
|
+
};
|
|
85
|
+
if (base.startsWith("cover-url:")) return {
|
|
86
|
+
kind: "url",
|
|
87
|
+
media: "image",
|
|
88
|
+
value: base.slice(10),
|
|
89
|
+
fit: "cover"
|
|
90
|
+
};
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
function boardTexturePixels(item, scale) {
|
|
94
|
+
const crop = item.type === "image" ? item.props.crop : void 0;
|
|
95
|
+
return Math.max(item.frame.width / (crop?.w || 1), item.frame.height / (crop?.h || 1)) * scale;
|
|
96
|
+
}
|
|
97
|
+
const BOARD_THUMBNAIL_EDGE = 64;
|
|
98
|
+
function boardTextureEdge(item, scale) {
|
|
99
|
+
const pixels = boardTexturePixels(item, scale);
|
|
100
|
+
if (pixels <= 64) return 64;
|
|
101
|
+
return pixels > 1536 ? Number.POSITIVE_INFINITY : mediaVariantSize(pixels);
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { BOARD_THUMBNAIL_EDGE, boardAssetKey, boardAssetKeySource, boardAssetRefKey, 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
|
-
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,
|
|
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, BoardItemPreview, BoardItemPreviewSchema, 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, boardItemPreview, 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, 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,17 +23,19 @@ 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 { BOARD_FRAME_LABEL_LINE_HEIGHT, BOARD_FRAME_LABEL_SIZE, SHAPE_LABEL_PADDING, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardEditableText, boardFontFamily, frameLabelHitRect, frameLabelOffset, 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 {
|
|
36
|
+
import { BOARD_THUMBNAIL_EDGE, BoardAssetKeySource, BoardAssetMedia, BoardAssetRef, boardAssetKey, boardAssetKeySource, boardAssetRefKey, boardTextureEdge, boardTexturePixels, imageAssetKey } from "./asset-key.js";
|
|
37
|
+
import { BoardMediaFileResolver, BoardMediaSize, BoardMediaSizeOptions, BoardMediaTarget, boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes } from "./media-sizes.js";
|
|
38
|
+
import { BoardItemActivation, 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";
|
|
39
41
|
import { createBoardEntityId, createBoardItemId } from "./items/id.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_FRAME_LABEL_LINE_HEIGHT, BOARD_FRAME_LABEL_SIZE, 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, BoardAssetRef, 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, BoardItemActivation, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemLookup, BoardItemOf, BoardItemPreview, BoardItemPreviewSchema, 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, boardAssetRefKey, boardColorCssVar, boardDocumentAt, boardEase, boardEditableText, boardFontFamily, boardItemOrigin, boardItemPreview, 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, frameLabelHitRect, frameLabelOffset, 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 };
|