@neta-art/cohub 6.0.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/board/animation.d.ts +2 -1
- package/dist/board/animation.js +0 -1
- package/dist/board/core/connections.js +4 -4
- package/dist/board/core/export-plan.js +1 -1
- package/dist/board/core/shape-types.js +0 -1
- package/dist/board/index.d.ts +6 -5
- package/dist/board/index.js +7 -7
- package/dist/board/mutation.d.ts +2 -11
- package/dist/board/mutation.js +2 -56
- package/dist/board/render/renderers/text-card-renderer.js +1 -1
- package/dist/board/semantic-document.d.ts +30 -0
- package/dist/board/semantic-document.js +271 -0
- package/dist/board/semantic-mutation.d.ts +10 -0
- package/dist/board/semantic-mutation.js +203 -0
- package/dist/chunks/http.d.ts +340 -317
- package/dist/chunks/http.js +477 -1784
- package/dist/chunks/transport.js +1 -1
- package/dist/chunks/websocket.d.ts +3677 -3151
- package/dist/chunks/websocket.js +1 -1
- package/dist/http.d.ts +3 -3
- package/dist/index.d.ts +165 -119
- package/dist/index.js +1419 -446
- package/dist/protocol/dist/board-authoring.d.ts +1305 -1
- package/dist/protocol/dist/board-authoring.js +80 -6
- package/dist/protocol/dist/board-codec.d.ts +2 -2
- package/dist/protocol/dist/board-codec.js +19 -4
- package/dist/protocol/dist/board-composition.d.ts +126 -1
- package/dist/protocol/dist/board-composition.js +1 -9
- package/dist/protocol/dist/board-connection.d.ts +16 -16
- package/dist/protocol/dist/board-connection.js +16 -16
- package/dist/protocol/dist/board-document.d.ts +34 -3
- package/dist/protocol/dist/board-document.js +3 -1
- package/dist/protocol/dist/board-effect.d.ts +94 -0
- package/dist/protocol/dist/board-effect.js +53 -0
- package/dist/protocol/dist/board-json.js +16 -0
- package/dist/protocol/dist/board.d.ts +34 -164
- package/dist/protocol/dist/board.js +44 -45
- package/dist/protocol/dist/index.d.ts +8 -8
- package/dist/protocol/dist/realtime/types.d.ts +1 -1
- package/dist/types.d.ts +3 -1
- package/package.json +1 -2
- package/dist/board/codec.d.ts +0 -27
- package/dist/board/codec.js +0 -277
- package/dist/protocol/dist/board-content.js +0 -26
- package/dist/protocol/dist/board-upgrade.js +0 -2
- package/dist/protocol/dist/identifiers.js +0 -10
- package/dist/protocol/dist/index.js +0 -19
- package/dist/protocol/dist/provenance.js +0 -15
- package/dist/protocol/dist/public-identifiers.js +0 -38
- package/dist/protocol/dist/realtime/board-awareness.js +0 -119
- package/dist/protocol/dist/ui-command.js +0 -2
- package/dist/protocol/dist/work-promotion-stats.js +0 -11
- package/dist/protocol/dist/work-surface.js +0 -2
- package/dist/protocol/dist/work-view-stats.js +0 -3
- package/dist/protocol/dist/work.d.ts +0 -1
- /package/dist/protocol/dist/{board-upgrade.d.ts → app.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -98,7 +98,7 @@ const board = space.board(created.board.id);
|
|
|
98
98
|
// Machine-readable types, enums and coordinate spaces for dynamic clients.
|
|
99
99
|
const capabilities = await board.capabilities();
|
|
100
100
|
|
|
101
|
-
const snapshot = await board.authoring();
|
|
101
|
+
const snapshot = await board.authoring({ include: ["items"] });
|
|
102
102
|
|
|
103
103
|
await board.mutateSemantic({
|
|
104
104
|
baseVersion: snapshot.board.version,
|
|
@@ -116,13 +116,14 @@ await board.play({
|
|
|
116
116
|
});
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
A bound `BoardClient` injects its `boardId` into
|
|
120
|
-
|
|
119
|
+
A bound `BoardClient` injects its `boardId` into semantic mutation requests.
|
|
120
|
+
Realtime subscriptions use the same semantic resource projection:
|
|
121
121
|
|
|
122
122
|
```ts
|
|
123
123
|
const stop = board.subscribe({
|
|
124
|
-
|
|
124
|
+
changed(event) {
|
|
125
125
|
console.log("version", event.payload.version);
|
|
126
|
+
console.log("items", event.payload.changed.items);
|
|
126
127
|
},
|
|
127
128
|
playback(event) {
|
|
128
129
|
console.log("playback", event.payload.status);
|
|
@@ -132,7 +133,7 @@ const stop = board.subscribe({
|
|
|
132
133
|
stop();
|
|
133
134
|
```
|
|
134
135
|
|
|
135
|
-
Task
|
|
136
|
+
Task Items keep a small, replaceable display snapshot beside their stable `taskRunId`. The SDK can build that projection from an authoritative TaskRun without copying the full payload, result or inline media into a Board:
|
|
136
137
|
|
|
137
138
|
```ts
|
|
138
139
|
import { taskRunToBoardTaskSnapshot } from "@neta-art/cohub/board";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BoardCapability, BoardRenderCost } from "../protocol/dist/board-constants.js";
|
|
2
2
|
import { BoardAnimationTarget, BoardComposition, BoardEasing, BoardProceduralClip, BoardTimelineMarker, BoardTrack, BoardTrackInterpolation } from "../protocol/dist/board-composition.js";
|
|
3
|
-
import { BoardAssetRef,
|
|
3
|
+
import { BoardAssetRef, BoardEffect } from "../protocol/dist/board-effect.js";
|
|
4
|
+
import { BoardDiagnostic, BoardValidationResult } from "../protocol/dist/board.js";
|
|
4
5
|
import "../protocol/dist/index.js";
|
|
5
6
|
//#region src/board/animation.d.ts
|
|
6
7
|
type CompositionInput = Omit<BoardComposition, "revision"> & {
|
package/dist/board/animation.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BOARD_BUILTIN_CAPABILITIES, DEFAULT_BOARD_RENDER_LIMITS } from "../protocol/dist/board-constants.js";
|
|
2
2
|
import { BOARD_ANIMATION_CHANNELS, BoardCompositionSchema, BoardProceduralClipSchema, BoardTrackSchema } from "../protocol/dist/board-composition.js";
|
|
3
3
|
import { estimateBuiltinBoardClipCost, validateBuiltinBoardClip } from "../protocol/dist/board-capability-registry.js";
|
|
4
|
-
import "../protocol/dist/index.js";
|
|
5
4
|
//#region src/board/animation.ts
|
|
6
5
|
function track(input) {
|
|
7
6
|
return BoardTrackSchema.parse(input);
|
|
@@ -238,11 +238,11 @@ const CURVE_SEGMENTS = 20;
|
|
|
238
238
|
* fetched.
|
|
239
239
|
*/
|
|
240
240
|
function resolveConnection(connection, getFrame, options = {}) {
|
|
241
|
-
const sourceFrame = getFrame(connection.source.
|
|
242
|
-
const targetFrame = getFrame(connection.target.
|
|
241
|
+
const sourceFrame = getFrame(connection.source.itemId);
|
|
242
|
+
const targetFrame = getFrame(connection.target.itemId);
|
|
243
243
|
if (!sourceFrame || !targetFrame) return null;
|
|
244
244
|
const gap = options.gap ?? 4;
|
|
245
|
-
if (connection.source.
|
|
245
|
+
if (connection.source.itemId === connection.target.itemId) {
|
|
246
246
|
const path = selfLoopPath(sourceFrame, gap);
|
|
247
247
|
const first = path[0];
|
|
248
248
|
const last = path[path.length - 1];
|
|
@@ -398,7 +398,7 @@ function createConnectionIndex(connections) {
|
|
|
398
398
|
const byId = /* @__PURE__ */ new Map();
|
|
399
399
|
for (const connection of connections) {
|
|
400
400
|
byId.set(connection.id, connection);
|
|
401
|
-
for (const nodeId of /* @__PURE__ */ new Set([connection.source.
|
|
401
|
+
for (const nodeId of /* @__PURE__ */ new Set([connection.source.itemId, connection.target.itemId])) {
|
|
402
402
|
const list = byNode.get(nodeId);
|
|
403
403
|
if (list) list.push(connection.id);
|
|
404
404
|
else byNode.set(nodeId, [connection.id]);
|
|
@@ -55,7 +55,7 @@ function exportConnectionBounds(connection, getFrame) {
|
|
|
55
55
|
function connectionsWithin(document, items) {
|
|
56
56
|
if (document.connections.length === 0) return [];
|
|
57
57
|
const present = new Set(items.map((item) => item.id));
|
|
58
|
-
return document.connections.filter((connection) => present.has(connection.source.
|
|
58
|
+
return document.connections.filter((connection) => present.has(connection.source.itemId) && present.has(connection.target.itemId));
|
|
59
59
|
}
|
|
60
60
|
function resolveRegion(document, region, getFrame) {
|
|
61
61
|
switch (region.kind) {
|
package/dist/board/index.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../protocol/dist/board-constants.js";
|
|
2
|
-
import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION,
|
|
2
|
+
import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, flipBoardConnection, normalizeBoardConnectionStyle } from "../protocol/dist/board-connection.js";
|
|
3
3
|
import { BoardTrackInterpolation } from "../protocol/dist/board-composition.js";
|
|
4
|
+
import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
|
|
4
5
|
import { BoardColorId } from "../protocol/dist/board-node.js";
|
|
5
|
-
import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, BoardManifest, BoardNodeRecord, BoardRecord, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
|
|
6
6
|
import "../protocol/dist/index.js";
|
|
7
7
|
import { BOARD_CHANNELS, BoardExtensionDefinition, BoardExtensionRegistry, BoardPresetDefinition, CompositionInput, DEFAULT_BOARD_LIMITS, ProceduralClipInput, QualityProfile, RenderBounds, SampledTrack, TrackInput, compileComposition, composition, createBoardExtensionRegistry, proceduralClip, sampleCompositionTracks, sampleEasing, sampleTrack, track } from "./animation.js";
|
|
8
8
|
import { BOARD_REMOTE_URL_MAX_LENGTH, BoardRemoteUrlSchema, isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../protocol/dist/board-url.js";
|
|
9
9
|
import { BOARD_TASK_ARTIFACT_LIMIT, BoardAppearance, BoardAppearanceSchema, BoardArrowItem, BoardArrowItemSchema, BoardAudioItem, BoardAudioItemSchema, BoardDocument, BoardDocumentSchema, BoardDrawItem, BoardDrawItemSchema, BoardFileItem, BoardFileItemSchema, BoardFileSnapshot, BoardFileSnapshotSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardFrameSchema, BoardGeoItem, BoardGeoItemSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemSchema, BoardItemStyle, BoardItemStyleSchema, BoardKnownItem, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardPoint, BoardPointSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardUnknownItem, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardViewportSchema, DrawPoint, DrawPointSchema, KNOWN_BOARD_ITEM_TYPES, KnownBoardItemType, SpaceFileRef, SpaceFileRefSchema, UNKNOWN_BOARD_ITEM_TYPE, isFileBackedItem, isMediaItem, isUnknownItem, parseBoardDocument, parseBoardItemLoose, unknownRealType, withResolvedConnections } from "../protocol/dist/board-document.js";
|
|
10
|
-
import { BOARD_NODE_SOURCE, DEFAULT_BOARD_APPEARANCE, ITEM_BASE_KEYS, WireBackedBoardItem, boardBootstrapToDocument, boardNodeToItem, isRecord, nodeInputFromRecord, sourceForItem } from "./codec.js";
|
|
11
10
|
import { BoardNormalizedPoint, BoardScreenOffset, BoardScreenPoint, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CornerResizeHandle, EDGE_RESIZE_HANDLES, FIT_PADDING, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, ResizeHandle, ScreenPoint, Size, VIEWPORT_MARGIN_RATIO, WorldPoint, angleFromCenter, cameraForFocus, cameraForRect, cameraForState, clamp, clampZoom, degToRad, expandRect, fitToContent, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, handlePosition, itemBounds, normalizeRotation, normalizeViewport, normalizedPoint, panBy, pointToWorld, pointsBounds, radToDeg, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, resizeFrame, resizeFrameToSize, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, scaleFrames, screenOffset, screenPoint, screenToWorld, selectionBounds, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
|
|
12
11
|
import { ResolvedArrow, arrowBounds, arrowFrame, distanceToArrow, resolveArrow, sampleArrow, translateArrow } from "./core/arrow-geometry.js";
|
|
13
12
|
import { CONNECTION_ENDPOINT_GAP, ConnectionIndex, FrameLookup, ResolvedConnection, ResolvedConnectionEndpoint, anchorPointOnFrame, anchorToWorld, autoConnectionSide, connectionArrowheads, connectionBounds, connectionHitTest, createConnectionIndex, distanceToConnection, pathMidpoint, resolveConnection, worldToAnchor } from "./core/connections.js";
|
|
@@ -21,8 +20,10 @@ import { ShapeDefinition, definitionForItem, getShapeDefinition, registerShapeDe
|
|
|
21
20
|
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardTextLineHeight, clampBoardTextFontSize, measureBoardText, setBoardTextMeasurer } from "./core/text-metrics.js";
|
|
22
21
|
import { BoardStyledToolId, BoardToolStyleMap, BoardToolStylePatch, DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./core/tool-styles.js";
|
|
23
22
|
import { boardImageKeySource, imageAssetKey } from "./image-key.js";
|
|
23
|
+
import { DEFAULT_BOARD_APPEARANCE, applyBoardAuthoringSnapshot, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardItemToAuthoringItem } from "./semantic-document.js";
|
|
24
24
|
import { BoardMediaKind, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind } from "./media.js";
|
|
25
25
|
import { BoardAssetSource, BoardPlayableMedia, playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache } from "./media-playback.js";
|
|
26
|
-
import {
|
|
26
|
+
import { patchBoardAppearance } from "./mutation.js";
|
|
27
|
+
import { applyBoardSemanticCommands, boardDocumentToSemanticCommands } from "./semantic-mutation.js";
|
|
27
28
|
import { featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot } from "./task.js";
|
|
28
|
-
export { AUTO_BOARD_CONNECTION_ANCHOR, type ArrowShapeProps, type AudioShapeProps, BOARD_CHANNELS, BOARD_COLORS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_DOCUMENT_KIND, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION,
|
|
29
|
+
export { AUTO_BOARD_CONNECTION_ANCHOR, type ArrowShapeProps, type AudioShapeProps, BOARD_CHANNELS, BOARD_COLORS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_DOCUMENT_KIND, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION, BOARD_REMOTE_URL_MAX_LENGTH, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BoardAppearance, BoardAppearanceSchema, BoardArrowItem, BoardArrowItemSchema, BoardAssetSource, BoardAudioItem, BoardAudioItemSchema, type BoardCameraFocus, type BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, type BoardCameraState, BoardCameraStateSchema, BoardColorEntry, type BoardColorId, BoardColorValue, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardDocument, BoardDocumentSchema, BoardDrawItem, BoardDrawItemSchema, BoardExportAssetSelection, BoardExportPlan, BoardExportPlanInput, BoardExportRegion, BoardExtensionDefinition, BoardExtensionRegistry, BoardFileItem, BoardFileItemSchema, BoardFileSnapshot, BoardFileSnapshotFacts, BoardFileSnapshotSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardFrameSchema, BoardGeoItem, BoardGeoItemSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemSchema, BoardItemStyle, BoardItemStyleSchema, BoardKnownItem, BoardMediaKind, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardNormalizedPoint, BoardPlayableMedia, BoardPoint, BoardPointSchema, BoardPresetDefinition, BoardRelationSchema, BoardRemoteUrlSchema, BoardScreenOffset, BoardScreenPoint, BoardShapeColors, BoardStyledToolId, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardToolStyleMap, BoardToolStylePatch, type BoardTrackInterpolation, BoardUnknownItem, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardViewportSchema, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, BuildSnapshotInput, CONNECTION_ENDPOINT_GAP, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CompositionInput, ConnectionIndex, CornerResizeHandle, DEFAULT_BOARD_APPEARANCE, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_LIMITS, DEFAULT_BOARD_RELATION, DEFAULT_BOARD_TOOL_STYLES, DrawPoint, DrawPointSchema, type DrawShapeProps, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, FileAvailability, FilePreviewKind, FrameLookup, GEO_KINDS, type GeoKind, type GeoShapeProps, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, type HandleDragResult, type ImageShapeProps, KNOWN_BOARD_ITEM_TYPES, KnownBoardItemType, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, ProceduralClipInput, QualityProfile, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, RenderBounds, ResizeHandle, ResolvedArrow, ResolvedConnection, ResolvedConnectionEndpoint, ResolvedCover, SampledTrack, ScreenPoint, type ShapeCapabilities, ShapeDefinition, type ShapeGeometry, type ShapeHandle, type ShapeHandleId, type ShapeResizeMode, Size, SpaceFileRef, SpaceFileRefSchema, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, type TextShapeProps, TrackInput, UNKNOWN_BOARD_ITEM_TYPE, VIEWPORT_MARGIN_RATIO, type VideoShapeProps, WorldPoint, anchorPointOnFrame, anchorToWorld, angleFromCenter, applyBoardAuthoringSnapshot, applyBoardSemanticCommands, arrowBounds, arrowFrame, autoConnectionSide, availabilityFromError, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardColorCssVar, boardDocumentToSemanticCommands, boardFrameLookup, boardImageKeySource, boardItemToAuthoringItem, boardTextLineHeight, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardStrokeSize, clampBoardTextFontSize, clampZoom, compileComposition, composition, computeDrawBounds, connectionArrowheads, connectionBounds, connectionHitTest, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, createBoardExtensionRegistry, createBoardToolStyles, createConnectionIndex, definitionForItem, degToRad, distanceToArrow, distanceToConnection, distanceToStroke, expandRect, exportConnectionBounds, exportItemBounds, featuredTaskArtifact, fileBaseName, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, fitToContent, flipBoardConnection, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, getShapeDefinition, handlePosition, imageAssetKey, inferBoardMediaKind, isBoardColorId, isBoardPath, isFileBackedItem, isFileSnapshotFresh, isGeoKind, isMediaItem, isPublicBoardRemoteAddress, isUnknownItem, itemBounds, measureBoardText, mergeFileSnapshot, normalizeBoardConnectionStyle, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, panBy, parseBoardDocument, parseBoardItemLoose, parseBoardManifest, patchBoardAppearance, pathMidpoint, pickBoardColor, planBoardExport, playableBoardMedia, playableBoardMediaList, pointToWorld, pointsBounds, proceduralClip, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, registerShapeDefinition, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resizeModeForCapabilities, resolveArrow, resolveBoardColor, resolveConnection, resolveCoverRef, resolveSpacePath, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleArrow, sampleCompositionTracks, sampleEasing, sampleRadius, sampleTrack, scaleFrames, screenOffset, screenPoint, screenToWorld, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextMeasurer, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, shouldFetchFileExcerpt, simplifyDrawIndices, splitFrontmatter, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot, track, translateArrow, unionRects, unknownRealType, unknownShapeDefinition, visibleWorldRect, withResolvedConnections, worldOffset, worldPoint, worldRect, worldToAnchor, worldToScreen, zoomAround };
|
package/dist/board/index.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../protocol/dist/board-constants.js";
|
|
2
|
-
import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnectionAnchorSchema, BoardConnectionEndpointSchema, BoardConnectionPatchSchema, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION,
|
|
3
|
-
import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema,
|
|
2
|
+
import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnectionAnchorSchema, BoardConnectionEndpointSchema, BoardConnectionPatchSchema, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, flipBoardConnection, normalizeBoardConnectionStyle } from "../protocol/dist/board-connection.js";
|
|
3
|
+
import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
|
|
4
4
|
import { BOARD_REMOTE_URL_MAX_LENGTH, BoardRemoteUrlSchema, isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../protocol/dist/board-url.js";
|
|
5
5
|
import { BOARD_TASK_ARTIFACT_LIMIT, BoardAppearanceSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardDocumentSchema, BoardDrawItemSchema, BoardFileItemSchema, BoardFileSnapshotSchema, BoardFrameItemSchema, BoardFrameSchema, BoardGeoItemSchema, BoardImageItemSchema, BoardItemSchema, BoardItemStyleSchema, BoardMediaSnapshotSchema, BoardPointSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardVideoItemSchema, BoardViewportSchema, DrawPointSchema, KNOWN_BOARD_ITEM_TYPES, SpaceFileRefSchema, UNKNOWN_BOARD_ITEM_TYPE, isFileBackedItem, isMediaItem, isUnknownItem, parseBoardDocument, parseBoardItemLoose, unknownRealType, withResolvedConnections } from "../protocol/dist/board-document.js";
|
|
6
|
-
import "../protocol/dist/index.js";
|
|
7
6
|
import { BOARD_CHANNELS, BoardExtensionRegistry, DEFAULT_BOARD_LIMITS, compileComposition, composition, createBoardExtensionRegistry, proceduralClip, sampleCompositionTracks, sampleEasing, sampleTrack, track } from "./animation.js";
|
|
8
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardTextLineHeight, clampBoardTextFontSize, measureBoardText, setBoardTextMeasurer } from "./core/text-metrics.js";
|
|
9
|
-
import { BOARD_NODE_SOURCE, DEFAULT_BOARD_APPEARANCE, ITEM_BASE_KEYS, boardBootstrapToDocument, boardNodeToItem, isRecord, nodeInputFromRecord, sourceForItem } from "./codec.js";
|
|
10
7
|
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, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
|
|
11
8
|
import { featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot } from "./task.js";
|
|
12
9
|
import { boardImageKeySource, imageAssetKey } from "./image-key.js";
|
|
10
|
+
import { DEFAULT_BOARD_APPEARANCE, applyBoardAuthoringSnapshot, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardItemToAuthoringItem } from "./semantic-document.js";
|
|
13
11
|
import { arrowBounds, arrowFrame, distanceToArrow, resolveArrow, sampleArrow, translateArrow } from "./core/arrow-geometry.js";
|
|
14
12
|
import { CONNECTION_ENDPOINT_GAP, anchorPointOnFrame, anchorToWorld, autoConnectionSide, connectionArrowheads, connectionBounds, connectionHitTest, createConnectionIndex, distanceToConnection, pathMidpoint, resolveConnection, worldToAnchor } from "./core/connections.js";
|
|
15
13
|
import { buildStrokeOutline, computeDrawBounds, distanceToStroke, sampleRadius, simplifyDrawIndices } from "./core/draw-geometry.js";
|
|
@@ -19,8 +17,10 @@ import { FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, availabilityFromError,
|
|
|
19
17
|
import { BOARD_COLORS, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor } from "./core/palette.js";
|
|
20
18
|
import { FULL_CAPABILITIES, GEO_KINDS, isGeoKind, resizeModeForCapabilities } from "./core/shape-types.js";
|
|
21
19
|
import { definitionForItem, getShapeDefinition, registerShapeDefinition, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, unknownShapeDefinition } from "./core/shape-definition.js";
|
|
20
|
+
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardTextLineHeight, clampBoardTextFontSize, measureBoardText, setBoardTextMeasurer } from "./core/text-metrics.js";
|
|
22
21
|
import { DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./core/tool-styles.js";
|
|
23
22
|
import { getMediaExtension, getMediaResourceTitle, inferBoardMediaKind } from "./media.js";
|
|
24
23
|
import { playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache } from "./media-playback.js";
|
|
25
|
-
import {
|
|
26
|
-
|
|
24
|
+
import { patchBoardAppearance } from "./mutation.js";
|
|
25
|
+
import { applyBoardSemanticCommands, boardDocumentToSemanticCommands } from "./semantic-mutation.js";
|
|
26
|
+
export { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CHANNELS, BOARD_COLORS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_DOCUMENT_KIND, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION, BOARD_REMOTE_URL_MAX_LENGTH, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BoardAppearanceSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, BoardConnectionAnchorSchema, BoardConnectionEndpointSchema, BoardConnectionPatchSchema, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardDocumentSchema, BoardDrawItemSchema, BoardExtensionRegistry, BoardFileItemSchema, BoardFileSnapshotSchema, BoardFrameItemSchema, BoardFrameSchema, BoardGeoItemSchema, BoardImageItemSchema, BoardItemSchema, BoardItemStyleSchema, BoardMediaSnapshotSchema, BoardPointSchema, BoardRelationSchema, BoardRemoteUrlSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardVideoItemSchema, BoardViewportSchema, CONNECTION_ENDPOINT_GAP, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, DEFAULT_BOARD_APPEARANCE, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_LIMITS, DEFAULT_BOARD_RELATION, DEFAULT_BOARD_TOOL_STYLES, DrawPointSchema, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, GEO_KINDS, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, KNOWN_BOARD_ITEM_TYPES, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, SpaceFileRefSchema, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, UNKNOWN_BOARD_ITEM_TYPE, VIEWPORT_MARGIN_RATIO, anchorPointOnFrame, anchorToWorld, angleFromCenter, applyBoardAuthoringSnapshot, applyBoardSemanticCommands, arrowBounds, arrowFrame, autoConnectionSide, availabilityFromError, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardColorCssVar, boardDocumentToSemanticCommands, boardFrameLookup, boardImageKeySource, boardItemToAuthoringItem, boardTextLineHeight, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardStrokeSize, clampBoardTextFontSize, clampZoom, compileComposition, composition, computeDrawBounds, connectionArrowheads, connectionBounds, connectionHitTest, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, createBoardExtensionRegistry, createBoardToolStyles, createConnectionIndex, definitionForItem, degToRad, distanceToArrow, distanceToConnection, distanceToStroke, expandRect, exportConnectionBounds, exportItemBounds, featuredTaskArtifact, fileBaseName, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, fitToContent, flipBoardConnection, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, getShapeDefinition, handlePosition, imageAssetKey, inferBoardMediaKind, isBoardColorId, isBoardPath, isFileBackedItem, isFileSnapshotFresh, isGeoKind, isMediaItem, isPublicBoardRemoteAddress, isUnknownItem, itemBounds, measureBoardText, mergeFileSnapshot, normalizeBoardConnectionStyle, normalizeBoardDocument, normalizeBoardRemoteUrl, normalizeRotation, normalizeViewport, normalizedPoint, panBy, parseBoardDocument, parseBoardItemLoose, parseBoardManifest, patchBoardAppearance, pathMidpoint, pickBoardColor, planBoardExport, playableBoardMedia, playableBoardMediaList, pointToWorld, pointsBounds, proceduralClip, radToDeg, rankedTaskArtifacts, readCoverFromFrontmatter, readTitleFromFrontmatter, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, registerShapeDefinition, resetBoardPlaybackUrlCache, resizeFrame, resizeFrameToSize, resizeModeForCapabilities, resolveArrow, resolveBoardColor, resolveConnection, resolveCoverRef, resolveSpacePath, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, sampleArrow, sampleCompositionTracks, sampleEasing, sampleRadius, sampleTrack, scaleFrames, screenOffset, screenPoint, screenToWorld, selectBoardExportAssets, selectionBounds, serializeBoardManifest, setBoardTextMeasurer, shapeBounds, shapeCapabilities, shapeHandles, shapeHitTest, shapeResizeMode, shouldFetchFileExcerpt, simplifyDrawIndices, splitFrontmatter, taskArtifactPreviewUrl, taskArtifacts, taskRunToBoardTaskSnapshot, track, translateArrow, unionRects, unknownRealType, unknownShapeDefinition, visibleWorldRect, withResolvedConnections, worldOffset, worldPoint, worldRect, worldToAnchor, worldToScreen, zoomAround };
|
package/dist/board/mutation.d.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import { BoardComposition } from "../protocol/dist/board-composition.js";
|
|
2
|
-
import { BoardEffect, BoardOperation, BoardPlaybackPolicy } from "../protocol/dist/board.js";
|
|
3
|
-
import "../protocol/dist/index.js";
|
|
4
1
|
import { BoardAppearance } from "../protocol/dist/board-document.js";
|
|
5
2
|
//#region src/board/mutation.d.ts
|
|
3
|
+
/** Merge Board appearance fields while preserving nested background/grid defaults. */
|
|
6
4
|
declare function patchBoardAppearance(current: BoardAppearance, patch: Partial<BoardAppearance>): BoardAppearance;
|
|
7
|
-
declare function boardAppearanceOperation(appearance: BoardAppearance): BoardOperation;
|
|
8
|
-
declare function boardTitleOperation(title: string): BoardOperation;
|
|
9
|
-
declare function boardPlaybackPolicyOperation(metadata: Record<string, unknown>, policy: BoardPlaybackPolicy | null): BoardOperation;
|
|
10
|
-
declare function boardEffectUpsertOperation(effect: Omit<BoardEffect, "boardId" | "revision">): BoardOperation;
|
|
11
|
-
declare function boardEffectDeleteOperation(effectId: string): BoardOperation;
|
|
12
|
-
declare function boardCompositionApplyOperation(composition: Omit<BoardComposition, "revision">): BoardOperation;
|
|
13
|
-
declare function boardCompositionDeleteOperation(compositionId: string): BoardOperation;
|
|
14
5
|
//#endregion
|
|
15
|
-
export {
|
|
6
|
+
export { patchBoardAppearance };
|
package/dist/board/mutation.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import { parseBoardCompositionInput } from "../protocol/dist/board-composition.js";
|
|
2
|
-
import { BoardEffectSchema } from "../protocol/dist/board.js";
|
|
3
1
|
import { BoardAppearanceSchema } from "../protocol/dist/board-document.js";
|
|
4
|
-
import "../protocol/dist/index.js";
|
|
5
2
|
//#region src/board/mutation.ts
|
|
6
|
-
|
|
7
|
-
boardId: true,
|
|
8
|
-
revision: true
|
|
9
|
-
});
|
|
3
|
+
/** Merge Board appearance fields while preserving nested background/grid defaults. */
|
|
10
4
|
function patchBoardAppearance(current, patch) {
|
|
11
5
|
return BoardAppearanceSchema.parse({
|
|
12
6
|
...current,
|
|
@@ -15,53 +9,5 @@ function patchBoardAppearance(current, patch) {
|
|
|
15
9
|
grid: patch.grid ?? current.grid
|
|
16
10
|
});
|
|
17
11
|
}
|
|
18
|
-
function boardAppearanceOperation(appearance) {
|
|
19
|
-
return {
|
|
20
|
-
type: "board.patch",
|
|
21
|
-
payload: { patch: { metadataPatch: { appearance } } }
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function boardTitleOperation(title) {
|
|
25
|
-
return {
|
|
26
|
-
type: "board.patch",
|
|
27
|
-
payload: { patch: { title } }
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function boardPlaybackPolicyOperation(metadata, policy) {
|
|
31
|
-
if (policy) return {
|
|
32
|
-
type: "board.patch",
|
|
33
|
-
payload: { patch: { metadataPatch: { playback: policy } } }
|
|
34
|
-
};
|
|
35
|
-
const next = { ...metadata };
|
|
36
|
-
delete next.playback;
|
|
37
|
-
return {
|
|
38
|
-
type: "board.patch",
|
|
39
|
-
payload: { patch: { metadata: next } }
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function boardEffectUpsertOperation(effect) {
|
|
43
|
-
return {
|
|
44
|
-
type: "effect.upsert",
|
|
45
|
-
payload: { effect: EffectInputSchema.parse(effect) }
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function boardEffectDeleteOperation(effectId) {
|
|
49
|
-
return {
|
|
50
|
-
type: "effect.delete",
|
|
51
|
-
payload: { effectId }
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function boardCompositionApplyOperation(composition) {
|
|
55
|
-
return {
|
|
56
|
-
type: "composition.apply",
|
|
57
|
-
payload: { composition: parseBoardCompositionInput(composition) }
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function boardCompositionDeleteOperation(compositionId) {
|
|
61
|
-
return {
|
|
62
|
-
type: "composition.delete",
|
|
63
|
-
payload: { compositionId }
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
12
|
//#endregion
|
|
67
|
-
export {
|
|
13
|
+
export { patchBoardAppearance };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BOARD_FONT_STACK } from "../../../protocol/dist/board-constants.js";
|
|
2
|
-
import { TEXT_FONT_SIZE, boardTextLineHeight, clampBoardTextFontSize, measureBoardText } from "../../core/text-metrics.js";
|
|
3
2
|
import { pickBoardColor } from "../../core/palette.js";
|
|
3
|
+
import { TEXT_FONT_SIZE, boardTextLineHeight, clampBoardTextFontSize, measureBoardText } from "../../core/text-metrics.js";
|
|
4
4
|
import { syncTextResolution, textResolutionForZoom } from "../text-resolution.js";
|
|
5
5
|
import { positionShell } from "./base-card-renderer.js";
|
|
6
6
|
import { drawFarPlate } from "./far-plate.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BoardAuthoringItem, BoardAuthoringSnapshot } from "../protocol/dist/board-authoring.js";
|
|
2
|
+
import { BoardMutationReceipt } from "../protocol/dist/board.js";
|
|
3
|
+
import "../protocol/dist/index.js";
|
|
4
|
+
import { BoardDocument, BoardItem } from "../protocol/dist/board-document.js";
|
|
5
|
+
//#region src/board/semantic-document.d.ts
|
|
6
|
+
declare const DEFAULT_BOARD_APPEARANCE: {
|
|
7
|
+
theme: string;
|
|
8
|
+
background: {
|
|
9
|
+
kind: "custom" | "dots" | "grid" | "image" | "shader" | "solid";
|
|
10
|
+
color?: string | undefined;
|
|
11
|
+
imageUrl?: string | undefined;
|
|
12
|
+
fit?: "contain" | "cover" | "repeat" | undefined;
|
|
13
|
+
position?: "bottom" | "center" | "left" | "right" | "top" | undefined;
|
|
14
|
+
opacity?: number | undefined;
|
|
15
|
+
};
|
|
16
|
+
grid: {
|
|
17
|
+
visible: boolean;
|
|
18
|
+
size: number;
|
|
19
|
+
opacity: number;
|
|
20
|
+
};
|
|
21
|
+
mood: "arcane" | "clean" | "cyber" | "natural" | "playful";
|
|
22
|
+
};
|
|
23
|
+
/** Convert a public authoring Item to the renderer/editor document shape. */
|
|
24
|
+
declare function boardAuthoringItemToDocumentItem(item: BoardAuthoringItem): BoardItem;
|
|
25
|
+
/** Convert the renderer/editor item back to the public authoring envelope. */
|
|
26
|
+
declare function boardItemToAuthoringItem(item: BoardItem): BoardAuthoringItem | null;
|
|
27
|
+
declare function boardAuthoringSnapshotToDocument(input: BoardAuthoringSnapshot): BoardDocument;
|
|
28
|
+
declare function applyBoardAuthoringSnapshot(document: BoardDocument, input: BoardAuthoringSnapshot, changed: BoardMutationReceipt["changed"]): BoardDocument;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { DEFAULT_BOARD_APPEARANCE, applyBoardAuthoringSnapshot, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardItemToAuthoringItem };
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { BoardAuthoringItemSchema } from "../protocol/dist/board-authoring.js";
|
|
2
|
+
import { BOARD_DOCUMENT_KIND } from "../protocol/dist/board.js";
|
|
3
|
+
import { BoardAppearanceSchema, UNKNOWN_BOARD_ITEM_TYPE, isUnknownItem, parseBoardDocument } from "../protocol/dist/board-document.js";
|
|
4
|
+
//#region src/board/semantic-document.ts
|
|
5
|
+
const DEFAULT_BOARD_APPEARANCE = BoardAppearanceSchema.parse({
|
|
6
|
+
theme: "clean",
|
|
7
|
+
background: { kind: "solid" },
|
|
8
|
+
grid: {
|
|
9
|
+
visible: false,
|
|
10
|
+
size: 24,
|
|
11
|
+
opacity: .12
|
|
12
|
+
},
|
|
13
|
+
mood: "clean"
|
|
14
|
+
});
|
|
15
|
+
/** Convert a public authoring Item to the renderer/editor document shape. */
|
|
16
|
+
function boardAuthoringItemToDocumentItem(item) {
|
|
17
|
+
const base = {
|
|
18
|
+
id: item.id,
|
|
19
|
+
frame: item.frame,
|
|
20
|
+
...item.parentId !== void 0 ? { parentId: item.parentId } : {},
|
|
21
|
+
...item.locked ? { locked: true } : {},
|
|
22
|
+
...item.metadata ? { metadata: item.metadata } : {}
|
|
23
|
+
};
|
|
24
|
+
const props = item.props;
|
|
25
|
+
const style = "style" in item ? item.style : void 0;
|
|
26
|
+
const source = "source" in item ? item.source : void 0;
|
|
27
|
+
switch (item.type) {
|
|
28
|
+
case "text": return {
|
|
29
|
+
...base,
|
|
30
|
+
type: "text",
|
|
31
|
+
text: String(props.text ?? ""),
|
|
32
|
+
fontSize: Number(props.fontSize ?? 24),
|
|
33
|
+
color: String(style?.color ?? "neutral")
|
|
34
|
+
};
|
|
35
|
+
case "geo": return {
|
|
36
|
+
...base,
|
|
37
|
+
type: "geo",
|
|
38
|
+
geo: String(props.shape ?? "rectangle"),
|
|
39
|
+
text: String(props.text ?? ""),
|
|
40
|
+
color: String(style?.color ?? "brand"),
|
|
41
|
+
fillOpacity: Number(style?.fillOpacity ?? 0)
|
|
42
|
+
};
|
|
43
|
+
case "draw": return {
|
|
44
|
+
...base,
|
|
45
|
+
type: "draw",
|
|
46
|
+
points: props.points,
|
|
47
|
+
color: String(style?.color ?? "brand"),
|
|
48
|
+
size: Number(style?.strokeWidth ?? 4)
|
|
49
|
+
};
|
|
50
|
+
case "arrow": return {
|
|
51
|
+
...base,
|
|
52
|
+
type: "arrow",
|
|
53
|
+
...props,
|
|
54
|
+
color: String(style?.color ?? "brand"),
|
|
55
|
+
size: Number(style?.strokeWidth ?? 2.5)
|
|
56
|
+
};
|
|
57
|
+
case "frame": return {
|
|
58
|
+
...base,
|
|
59
|
+
type: "frame",
|
|
60
|
+
label: String(props.label ?? "Frame"),
|
|
61
|
+
color: String(style?.color ?? "neutral")
|
|
62
|
+
};
|
|
63
|
+
case "image": return {
|
|
64
|
+
...base,
|
|
65
|
+
type: "image",
|
|
66
|
+
ref: {
|
|
67
|
+
kind: "space-file",
|
|
68
|
+
path: String(source?.path ?? "")
|
|
69
|
+
},
|
|
70
|
+
...source?.snapshot ? { snapshot: source.snapshot } : {},
|
|
71
|
+
...props.crop ? { crop: props.crop } : {}
|
|
72
|
+
};
|
|
73
|
+
case "video": return {
|
|
74
|
+
...base,
|
|
75
|
+
type: "video",
|
|
76
|
+
ref: {
|
|
77
|
+
kind: "space-file",
|
|
78
|
+
path: String(source?.path ?? "")
|
|
79
|
+
},
|
|
80
|
+
...source?.snapshot ? { snapshot: source.snapshot } : {}
|
|
81
|
+
};
|
|
82
|
+
case "audio": return {
|
|
83
|
+
...base,
|
|
84
|
+
type: "audio",
|
|
85
|
+
ref: {
|
|
86
|
+
kind: "space-file",
|
|
87
|
+
path: String(source?.path ?? "")
|
|
88
|
+
},
|
|
89
|
+
...source?.snapshot ? { snapshot: source.snapshot } : {}
|
|
90
|
+
};
|
|
91
|
+
case "file": return {
|
|
92
|
+
...base,
|
|
93
|
+
type: "file",
|
|
94
|
+
ref: {
|
|
95
|
+
kind: "space-file",
|
|
96
|
+
path: String(source?.path ?? "")
|
|
97
|
+
},
|
|
98
|
+
...source?.snapshot ? { snapshot: source.snapshot } : {}
|
|
99
|
+
};
|
|
100
|
+
case "task": return {
|
|
101
|
+
...base,
|
|
102
|
+
type: "task",
|
|
103
|
+
taskRunId: String(props.taskRunId ?? ""),
|
|
104
|
+
snapshot: props.snapshot
|
|
105
|
+
};
|
|
106
|
+
default: return {
|
|
107
|
+
...base,
|
|
108
|
+
type: UNKNOWN_BOARD_ITEM_TYPE,
|
|
109
|
+
raw: item
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Convert the renderer/editor item back to the public authoring envelope. */
|
|
114
|
+
function boardItemToAuthoringItem(item) {
|
|
115
|
+
if (isUnknownItem(item)) {
|
|
116
|
+
const parsed = BoardAuthoringItemSchema.safeParse(item.raw);
|
|
117
|
+
return parsed.success ? parsed.data : null;
|
|
118
|
+
}
|
|
119
|
+
const base = {
|
|
120
|
+
id: item.id,
|
|
121
|
+
frame: item.frame,
|
|
122
|
+
...item.parentId !== void 0 ? { parentId: item.parentId } : {},
|
|
123
|
+
...item.locked ? { locked: true } : {},
|
|
124
|
+
...item.metadata ? { metadata: item.metadata } : {}
|
|
125
|
+
};
|
|
126
|
+
switch (item.type) {
|
|
127
|
+
case "text": return {
|
|
128
|
+
...base,
|
|
129
|
+
type: "text",
|
|
130
|
+
props: {
|
|
131
|
+
text: item.text,
|
|
132
|
+
fontSize: item.fontSize
|
|
133
|
+
},
|
|
134
|
+
style: { color: item.color }
|
|
135
|
+
};
|
|
136
|
+
case "geo": return {
|
|
137
|
+
...base,
|
|
138
|
+
type: "geo",
|
|
139
|
+
props: {
|
|
140
|
+
shape: item.geo,
|
|
141
|
+
text: item.text
|
|
142
|
+
},
|
|
143
|
+
style: {
|
|
144
|
+
color: item.color,
|
|
145
|
+
fillOpacity: item.fillOpacity
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
case "draw": return {
|
|
149
|
+
...base,
|
|
150
|
+
type: "draw",
|
|
151
|
+
props: { points: item.points },
|
|
152
|
+
style: {
|
|
153
|
+
color: item.color,
|
|
154
|
+
strokeWidth: item.size
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
case "arrow": return {
|
|
158
|
+
...base,
|
|
159
|
+
type: "arrow",
|
|
160
|
+
props: {
|
|
161
|
+
start: item.start,
|
|
162
|
+
end: item.end,
|
|
163
|
+
bend: item.bend,
|
|
164
|
+
arrowStart: item.arrowStart,
|
|
165
|
+
arrowEnd: item.arrowEnd,
|
|
166
|
+
label: item.label
|
|
167
|
+
},
|
|
168
|
+
style: {
|
|
169
|
+
color: item.color,
|
|
170
|
+
strokeWidth: item.size
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
case "frame": return {
|
|
174
|
+
...base,
|
|
175
|
+
type: "frame",
|
|
176
|
+
props: { label: item.label },
|
|
177
|
+
style: { color: item.color }
|
|
178
|
+
};
|
|
179
|
+
case "image": return {
|
|
180
|
+
...base,
|
|
181
|
+
type: "image",
|
|
182
|
+
props: item.crop ? { crop: item.crop } : {},
|
|
183
|
+
source: {
|
|
184
|
+
kind: "space-file",
|
|
185
|
+
path: item.ref.path,
|
|
186
|
+
...item.snapshot ? { snapshot: item.snapshot } : {}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
case "video": return {
|
|
190
|
+
...base,
|
|
191
|
+
type: "video",
|
|
192
|
+
props: {},
|
|
193
|
+
source: {
|
|
194
|
+
kind: "space-file",
|
|
195
|
+
path: item.ref.path,
|
|
196
|
+
...item.snapshot ? { snapshot: item.snapshot } : {}
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
case "audio": return {
|
|
200
|
+
...base,
|
|
201
|
+
type: "audio",
|
|
202
|
+
props: {},
|
|
203
|
+
source: {
|
|
204
|
+
kind: "space-file",
|
|
205
|
+
path: item.ref.path,
|
|
206
|
+
...item.snapshot ? { snapshot: item.snapshot } : {}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
case "file": return {
|
|
210
|
+
...base,
|
|
211
|
+
type: "file",
|
|
212
|
+
props: {},
|
|
213
|
+
source: {
|
|
214
|
+
kind: "space-file",
|
|
215
|
+
path: item.ref.path,
|
|
216
|
+
snapshot: item.snapshot
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
case "task": return {
|
|
220
|
+
...base,
|
|
221
|
+
type: "task",
|
|
222
|
+
props: {
|
|
223
|
+
taskRunId: item.taskRunId,
|
|
224
|
+
snapshot: item.snapshot
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function boardAuthoringSnapshotToDocument(input) {
|
|
230
|
+
const appearance = BoardAppearanceSchema.safeParse(input.board.metadata.appearance);
|
|
231
|
+
return parseBoardDocument({
|
|
232
|
+
kind: BOARD_DOCUMENT_KIND,
|
|
233
|
+
version: 1,
|
|
234
|
+
appearance: appearance.success ? appearance.data : DEFAULT_BOARD_APPEARANCE,
|
|
235
|
+
viewport: {
|
|
236
|
+
x: 0,
|
|
237
|
+
y: 0,
|
|
238
|
+
zoom: 1
|
|
239
|
+
},
|
|
240
|
+
items: (input.items ?? []).map(boardAuthoringItemToDocumentItem),
|
|
241
|
+
connections: input.connections ?? []
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
function applyBoardAuthoringSnapshot(document, input, changed) {
|
|
245
|
+
let items = document.items;
|
|
246
|
+
if (changed.orderChanged && input.items) items = input.items.map(boardAuthoringItemToDocumentItem);
|
|
247
|
+
else if (input.items !== void 0 || changed.items.length > 0) {
|
|
248
|
+
const received = new Map((input.items ?? []).map((item) => [item.id, item]));
|
|
249
|
+
const changedIds = new Set(changed.items);
|
|
250
|
+
items = document.items.filter((item) => !changedIds.has(item.id) || received.has(item.id)).map((item) => received.has(item.id) ? boardAuthoringItemToDocumentItem(received.get(item.id)) : item);
|
|
251
|
+
const present = new Set(items.map((item) => item.id));
|
|
252
|
+
for (const item of received.values()) if (!present.has(item.id)) items.push(boardAuthoringItemToDocumentItem(item));
|
|
253
|
+
}
|
|
254
|
+
let connections = document.connections;
|
|
255
|
+
if (input.connections !== void 0 || changed.connections.length > 0) {
|
|
256
|
+
const received = new Map((input.connections ?? []).map((connection) => [connection.id, connection]));
|
|
257
|
+
const changedIds = new Set(changed.connections);
|
|
258
|
+
connections = document.connections.filter((connection) => !changedIds.has(connection.id) || received.has(connection.id)).map((connection) => received.get(connection.id) ?? connection);
|
|
259
|
+
const present = new Set(connections.map((connection) => connection.id));
|
|
260
|
+
for (const connection of received.values()) if (!present.has(connection.id)) connections.push(connection);
|
|
261
|
+
}
|
|
262
|
+
const appearance = changed.board ? BoardAppearanceSchema.safeParse(input.board.metadata.appearance) : null;
|
|
263
|
+
return parseBoardDocument({
|
|
264
|
+
...document,
|
|
265
|
+
...appearance?.success ? { appearance: appearance.data } : {},
|
|
266
|
+
items,
|
|
267
|
+
connections
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
//#endregion
|
|
271
|
+
export { DEFAULT_BOARD_APPEARANCE, applyBoardAuthoringSnapshot, boardAuthoringItemToDocumentItem, boardAuthoringSnapshotToDocument, boardItemToAuthoringItem };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BoardSemanticCommand } from "../protocol/dist/board-authoring.js";
|
|
2
|
+
import "../protocol/dist/index.js";
|
|
3
|
+
import { BoardDocument } from "../protocol/dist/board-document.js";
|
|
4
|
+
//#region src/board/semantic-mutation.d.ts
|
|
5
|
+
/** Compile an editor document delta to the public semantic mutation command set. */
|
|
6
|
+
declare function boardDocumentToSemanticCommands(before: BoardDocument, after: BoardDocument): BoardSemanticCommand[];
|
|
7
|
+
/** Apply public semantic commands to the local render document (undo/rebase). */
|
|
8
|
+
declare function applyBoardSemanticCommands(document: BoardDocument, commands: readonly BoardSemanticCommand[]): BoardDocument;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { applyBoardSemanticCommands, boardDocumentToSemanticCommands };
|