@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,37 +1,39 @@
|
|
|
1
1
|
import { BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, clampBoardStrokeSize } from "../../protocol/dist/board-constants.js";
|
|
2
2
|
import { isPublicBoardRemoteAddress, normalizeBoardRemoteUrl } from "../../protocol/dist/board-url.js";
|
|
3
|
-
import { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SHAPE_GEOMETRIES, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem, parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
4
|
-
import { IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor } from "../../protocol/dist/board-layout.js";
|
|
5
|
-
import { applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "../../protocol/dist/board-patch.js";
|
|
3
|
+
import { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SHAPE_GEOMETRIES, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardItemPreviewSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, boardItemPreview, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem, parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
6
4
|
import { isBoardPath, parseBoardManifest, serializeBoardManifest } from "../../protocol/dist/board.js";
|
|
7
|
-
import { BOARD_SCHEMA_TARGETS, boardJsonSchema, boardSchemaOverview } from "../../protocol/dist/board-schema.js";
|
|
8
5
|
import { BOARD_TASK_SOURCE_PREFIX, boardTaskSource, featuredTaskArtifact, rankedTaskArtifacts, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, withObservedArtifactFacts } from "../../protocol/dist/board-task.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { boardScriptScope, composeBoardScriptItems, prepareBoardScriptOutput, scriptTemporaryPrefix, validateBoardScriptCommit, validateBoardScriptOutput } from "./script-scene.js";
|
|
13
|
-
import { boardScriptHitVisible, boardScriptTarget, resolveBoardScriptHit } from "./script-hit.js";
|
|
14
|
-
import { BOARD_SCRIPT_API } from "./script-api.js";
|
|
15
|
-
import { BOARD_SCRIPT_DRAWING_EXAMPLE } from "./script-example.js";
|
|
6
|
+
import { IDENTITY_MATRIX, adoptBoardNaturalSize, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextLayouter, sideAnchor } from "../../protocol/dist/board-layout.js";
|
|
7
|
+
import { applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "../../protocol/dist/board-patch.js";
|
|
8
|
+
import { BOARD_SCHEMA_TARGETS, boardJsonSchema, boardSchemaOverview } from "../../protocol/dist/board-schema.js";
|
|
16
9
|
import { applyBoardEvaluation, boardAnimationTime, boardDocumentAt, boardEase, compileBoardAnimations, evaluateBoardAnimations, parseHexColor, sampleBoardTrack } from "./animation.js";
|
|
17
10
|
import { buildBoardScene, orderBoardItems, placeItem, refreshBoardScene, sceneItemToItem, sceneItemsToRecord, toSceneItem } from "./scene.js";
|
|
11
|
+
import { CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, EDGE_RESIZE_HANDLES, FIT_PADDING, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, VIEWPORT_MARGIN_RATIO, angleFromCenter, cameraForFocus, cameraForRect, cameraForState, clamp, clampZoom, degToRad, expandRect, fitToContent, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, handlePosition, itemBounds, normalizeRotation, normalizeViewport, normalizedPoint, panBy, pointToWorld, pointsBounds, radToDeg, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, resizeFrame, resizeFrameToSize, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, scaleFrames, screenOffset, screenPoint, screenToWorld, selectionBounds, stableCullRect, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
|
|
18
12
|
import { createBoardAnimationSampler, resolveBoardAnimationCamera } from "./sampling.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
13
|
+
import { BOARD_THEME_IDS } from "./themes.js";
|
|
14
|
+
import { BOARD_COLORS, DEFAULT_BOARD_COLOR, boardColorCssVar, buildFallbackShapeColors, isBoardColorId, pickBoardColor, resolveBoardColor, resolveItemColor } from "./palette.js";
|
|
21
15
|
import { ARROW_BINDING_GAP, arrowHitRadius, arrowPathBounds, distanceToArrow, pathMidpoint, pathPointAt, resolveAnchor, resolveArrow, resolveSceneArrow } from "./arrow-geometry.js";
|
|
22
|
-
import { buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./draw-geometry.js";
|
|
23
|
-
import { appendBoardDrawSamples, quantizeDrawCoordinate } from "./draw-input.js";
|
|
24
|
-
import { BOARD_EXPORT_MAX_TEXTURES, selectBoardExportAssets } from "./export-assets.js";
|
|
25
16
|
import { BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, exportItemBounds, normalizeBoardDocument, planBoardExport } from "./export-plan.js";
|
|
17
|
+
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";
|
|
26
18
|
import { boardModelFormat, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind, isBoardModelItem } from "./media.js";
|
|
27
19
|
import { FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, buildCodeExcerpt, buildFileExcerpt, buildFileSnapshot, fileBaseName, fileCategory, fileStem, readCoverFromFrontmatter, readFrontmatterScalars, readTitleFromFrontmatter, resolveCoverRef, resolveFileTitle, resolveSpacePath, shouldFetchFileExcerpt, splitFrontmatter } from "./file-snapshot.js";
|
|
28
20
|
import { availabilityFromError, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileTypeLabel, formatFileSize, isFileSnapshotFresh, mergeFileSnapshot } from "./file-preview.js";
|
|
29
|
-
import {
|
|
21
|
+
import { buildStrokeOutline, buildStrokeRibbonGeometry, computeDrawBounds, createStrokeRibbonBuilder, distanceToStroke, isStrokeCorner, sampleRadius, simplifyDrawIndices, trimDrawPoints } from "./draw-geometry.js";
|
|
22
|
+
import { boardScriptItems, hasBoardScripts } from "./script-index.js";
|
|
23
|
+
import { boardScriptScope, composeBoardScriptItems, prepareBoardScriptOutput, scriptTemporaryPrefix, validateBoardScriptCommit, validateBoardScriptOutput } from "./script-scene.js";
|
|
24
|
+
import { boardScriptHitVisible, boardScriptTarget, resolveBoardScriptHit } from "./script-hit.js";
|
|
25
|
+
import { BOARD_THUMBNAIL_EDGE, boardAssetKey, boardAssetKeySource, boardAssetRefKey, boardTextureEdge, boardTexturePixels, imageAssetKey } from "./asset-key.js";
|
|
26
|
+
import { placeBoardOverlay } from "./overlay-placement.js";
|
|
27
|
+
import { BOARD_SCRIPT_API } from "./script-api.js";
|
|
28
|
+
import { BOARD_SCRIPT_DRAWING_EXAMPLE } from "./script-example.js";
|
|
29
|
+
import { boardPathTrack, boardSequence, boardSequencePatch } from "./authoring.js";
|
|
30
|
+
import { BOARD_PRESET_NAMES, boardNestedAnimation, boardNestedAnimationTrack, boardPresetTracks, isBoardPresetName, listBoardPresets } from "./presets.js";
|
|
31
|
+
import { appendBoardDrawSamples, quantizeDrawCoordinate } from "./draw-input.js";
|
|
32
|
+
import { BOARD_EXPORT_TEXTURE_BYTES, boardTextureBytes, selectBoardExportAssets } from "./export-assets.js";
|
|
30
33
|
import { SHAPE_KINDS, isShapeKind } from "./shape-types.js";
|
|
31
|
-
import { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily } from "./text-metrics.js";
|
|
32
34
|
import { DEFAULT_BOARD_TOOL_STYLES, createBoardToolStyles } from "./tool-styles.js";
|
|
33
35
|
import { clientToLocal, elementClientToLocal } from "./client-geometry.js";
|
|
34
|
-
import {
|
|
36
|
+
import { boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes } from "./media-sizes.js";
|
|
35
37
|
import { FULL_CAPABILITIES, defineBoardItem } from "./items/definition.js";
|
|
36
38
|
import { builtinBoardItems } from "./items/builtin.js";
|
|
37
39
|
import { createBoardEntityId, createBoardItemId } from "./items/id.js";
|
|
@@ -39,4 +41,4 @@ import { boardItemOrigin, boardOriginKey, boardTaskCardSize, createAppBoardItem,
|
|
|
39
41
|
import { createBoardRegistry, defaultBoardRegistry } from "./items/registry.js";
|
|
40
42
|
import { playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache, resolveBoardMediaUrl } from "./media-playback.js";
|
|
41
43
|
import { boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
|
|
42
|
-
export { ARROW_BINDING_GAP, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS,
|
|
44
|
+
export { ARROW_BINDING_GAP, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_TEXTURE_BYTES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_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, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardItemPreviewSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, SHAPE_KINDS, SHAPE_LABEL_PADDING, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, adoptBoardNaturalSize, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardAssetKey, boardAssetKeySource, 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 };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { BOARD_DEFAULT_SIZES } from "../../../protocol/dist/board-constants.js";
|
|
2
2
|
import { BoardMediaOriginSchema, parseBoardItem } from "../../../protocol/dist/board-model.js";
|
|
3
|
-
import { fitBoardMediaSize, pointsRect } from "../../../protocol/dist/board-layout.js";
|
|
4
3
|
import { featuredTaskArtifact } from "../../../protocol/dist/board-task.js";
|
|
4
|
+
import { fitBoardMediaSize, pointsRect } from "../../../protocol/dist/board-layout.js";
|
|
5
5
|
import "../geometry.js";
|
|
6
|
-
import { quantizeDrawCoordinate } from "../draw-input.js";
|
|
7
6
|
import { boardModelFormat, getMediaResourceTitle, inferBoardMediaKind } from "../media.js";
|
|
8
7
|
import { fileStem } from "../file-snapshot.js";
|
|
9
8
|
import { filePreviewKind } from "../file-preview.js";
|
|
9
|
+
import { quantizeDrawCoordinate } from "../draw-input.js";
|
|
10
10
|
import { DEFAULT_BOARD_TOOL_STYLES } from "../tool-styles.js";
|
|
11
11
|
import { createBoardItemId } from "./id.js";
|
|
12
12
|
//#region src/board/model/items/create.ts
|
|
@@ -249,7 +249,7 @@ function titleForBoardItem(value) {
|
|
|
249
249
|
case "task": return value.props.snapshot.title;
|
|
250
250
|
case "effect": return value.props.kind;
|
|
251
251
|
case "custom": return value.script.src.split("/").pop() ?? "Custom";
|
|
252
|
-
default: return value.type;
|
|
252
|
+
default: return value.preview?.title || value.type;
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
const RESULT_GAP = 24;
|
|
@@ -15,10 +15,18 @@ type BoardItemCapabilities = {
|
|
|
15
15
|
canLock: boolean;
|
|
16
16
|
};
|
|
17
17
|
type BoardItemResizeMode = "none" | "uniform" | "free";
|
|
18
|
+
/**
|
|
19
|
+
* What a plain press on an unselected item does. `select` selects it, like any
|
|
20
|
+
* item. `tap` opens it: a quick press reports an activation instead of selecting,
|
|
21
|
+
* a drag moves it (or pans, with the hand tool or read-only) without selecting,
|
|
22
|
+
* and hovering shows a pointer instead of connection ports.
|
|
23
|
+
*/
|
|
24
|
+
type BoardItemActivation = "select" | "tap";
|
|
18
25
|
declare const FULL_CAPABILITIES: BoardItemCapabilities;
|
|
19
26
|
type BoardItemDefinition<Props extends Record<string, unknown> = Record<string, unknown>> = {
|
|
20
27
|
type: BoardItemType;
|
|
21
28
|
capabilities?: Partial<BoardItemCapabilities>;
|
|
29
|
+
activation?: BoardItemActivation;
|
|
22
30
|
size?: {
|
|
23
31
|
width: number;
|
|
24
32
|
height: number;
|
|
@@ -32,4 +40,4 @@ type BoardItemOf<Definition> = Definition extends BoardItemDefinition<infer Prop
|
|
|
32
40
|
} : never;
|
|
33
41
|
declare function defineBoardItem<Props extends Record<string, unknown>>(definition: BoardItemDefinition<Props>): BoardItemDefinition<Props>;
|
|
34
42
|
//#endregion
|
|
35
|
-
export { BoardItemCapabilities, BoardItemDefinition, BoardItemOf, BoardItemResizeMode, FULL_CAPABILITIES, defineBoardItem };
|
|
43
|
+
export { BoardItemActivation, BoardItemCapabilities, BoardItemDefinition, BoardItemOf, BoardItemResizeMode, FULL_CAPABILITIES, defineBoardItem };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BoardItemCapabilities, BoardItemDefinition, BoardItemOf, BoardItemResizeMode, FULL_CAPABILITIES, defineBoardItem } from "./definition.js";
|
|
1
|
+
import { BoardItemActivation, BoardItemCapabilities, BoardItemDefinition, BoardItemOf, BoardItemResizeMode, FULL_CAPABILITIES, defineBoardItem } from "./definition.js";
|
|
2
2
|
import { builtinBoardItems } from "./builtin.js";
|
|
3
3
|
import { BoardAppMetadata, BoardItemEntry, BoardMediaItemKind, boardItemOrigin, boardOriginKey, boardTaskCardSize, createAppBoardItem, createArrowBoardItem, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createTaskBoardItem, createTaskResultItems, createTextBoardItem, mediaFrameSize, titleForBoardItem } from "./create.js";
|
|
4
4
|
import { createBoardEntityId, createBoardItemId } from "./id.js";
|
|
5
5
|
import { BoardItemInput, BoardRegistry, createBoardRegistry, defaultBoardRegistry } from "./registry.js";
|
|
6
|
-
export { BoardAppMetadata, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemOf, BoardItemResizeMode, BoardMediaItemKind, BoardRegistry, FULL_CAPABILITIES, boardItemOrigin, boardOriginKey, boardTaskCardSize, builtinBoardItems, createAppBoardItem, createArrowBoardItem, createBoardEntityId, createBoardItemId, createBoardRegistry, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createTaskBoardItem, createTaskResultItems, createTextBoardItem, defaultBoardRegistry, defineBoardItem, mediaFrameSize, titleForBoardItem };
|
|
6
|
+
export { BoardAppMetadata, BoardItemActivation, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemOf, BoardItemResizeMode, BoardMediaItemKind, BoardRegistry, FULL_CAPABILITIES, boardItemOrigin, boardOriginKey, boardTaskCardSize, builtinBoardItems, createAppBoardItem, createArrowBoardItem, createBoardEntityId, createBoardItemId, createBoardRegistry, createDrawBoardItem, createFileNodeForPath, createFrameBoardItem, createMediaBoardItem, createShapeBoardItem, createTaskBoardItem, createTaskResultItems, createTextBoardItem, defaultBoardRegistry, defineBoardItem, mediaFrameSize, titleForBoardItem };
|
|
@@ -2,7 +2,7 @@ import { BoardItem } from "../../../protocol/dist/board-model.js";
|
|
|
2
2
|
import "../../../protocol/dist/index.js";
|
|
3
3
|
import { Rect, WorldPoint } from "../geometry.js";
|
|
4
4
|
import { BoardSceneItem } from "../scene.js";
|
|
5
|
-
import { BoardItemCapabilities, BoardItemDefinition, BoardItemResizeMode } from "./definition.js";
|
|
5
|
+
import { BoardItemActivation, BoardItemCapabilities, BoardItemDefinition, BoardItemResizeMode } from "./definition.js";
|
|
6
6
|
import { BoardItemEntry } from "./create.js";
|
|
7
7
|
//#region src/board/model/items/registry.d.ts
|
|
8
8
|
type BoardItemInput = {
|
|
@@ -18,6 +18,7 @@ type BoardRegistry = {
|
|
|
18
18
|
readonly definitions: readonly BoardItemDefinition[];
|
|
19
19
|
get(type: string): BoardItemDefinition | undefined;
|
|
20
20
|
capabilities(item: Pick<BoardItem, "type">): BoardItemCapabilities;
|
|
21
|
+
activation(item: Pick<BoardItem, "type">): BoardItemActivation;
|
|
21
22
|
resizeMode(item: Pick<BoardItem, "type">): BoardItemResizeMode;
|
|
22
23
|
bounds(item: BoardSceneItem): Rect;
|
|
23
24
|
hitTest(item: BoardSceneItem, point: WorldPoint): boolean;
|
|
@@ -35,6 +35,7 @@ function createBoardRegistry(definitions = []) {
|
|
|
35
35
|
definitions: [...byType.values()],
|
|
36
36
|
get: (type) => byType.get(type),
|
|
37
37
|
capabilities: (item) => capabilitiesOf(item.type),
|
|
38
|
+
activation: (item) => byType.get(item.type)?.activation ?? "select",
|
|
38
39
|
resizeMode(item) {
|
|
39
40
|
const value = capabilitiesOf(item.type);
|
|
40
41
|
if (!value.canResize) return "none";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BoardItem } from "../../protocol/dist/board-model.js";
|
|
2
|
+
import "../../protocol/dist/index.js";
|
|
3
|
+
//#region src/board/model/media-sizes.d.ts
|
|
4
|
+
type BoardMediaSize = {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
};
|
|
8
|
+
type BoardMediaTarget = {
|
|
9
|
+
id: string;
|
|
10
|
+
type: "image" | "video";
|
|
11
|
+
source: {
|
|
12
|
+
kind: "file" | "url";
|
|
13
|
+
value: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
type BoardMediaFileResolver = (path: string, type: BoardMediaTarget["type"], signal?: AbortSignal) => Promise<BoardMediaSize | string | null>;
|
|
17
|
+
type BoardMediaSizeOptions = {
|
|
18
|
+
resolveFile?: BoardMediaFileResolver;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
};
|
|
21
|
+
declare function boardMediaTarget(id: string, item: BoardItem): BoardMediaTarget | null;
|
|
22
|
+
declare function probeBoardMediaSize(target: Omit<BoardMediaTarget, "id">, options?: BoardMediaSizeOptions): Promise<BoardMediaSize | null>;
|
|
23
|
+
/** Probes each unique media source once; unresolved items are left as is. */
|
|
24
|
+
declare function settleBoardMediaSizes(items: Readonly<Record<string, BoardItem>>, options?: Omit<BoardMediaSizeOptions, "signal"> & {
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
}): Promise<Record<string, BoardItem>>;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { BoardMediaFileResolver, BoardMediaSize, BoardMediaSizeOptions, BoardMediaTarget, boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { probeMediaSize } from "../../protocol/dist/core/media.js";
|
|
2
|
+
import { parseBoardMediaSource } from "../../protocol/dist/board-model.js";
|
|
3
|
+
import { featuredTaskArtifact } from "../../protocol/dist/board-task.js";
|
|
4
|
+
import { adoptBoardNaturalSize } from "../../protocol/dist/board-layout.js";
|
|
5
|
+
//#region src/board/model/media-sizes.ts
|
|
6
|
+
function boardMediaTarget(id, item) {
|
|
7
|
+
if (item.type === "image" || item.type === "video") {
|
|
8
|
+
if (item.props.snapshot?.naturalWidth && item.props.snapshot.naturalHeight) return null;
|
|
9
|
+
const source = parseBoardMediaSource(item.props.src);
|
|
10
|
+
return source ? {
|
|
11
|
+
id,
|
|
12
|
+
type: item.type,
|
|
13
|
+
source
|
|
14
|
+
} : null;
|
|
15
|
+
}
|
|
16
|
+
if (item.type !== "task") return null;
|
|
17
|
+
const artifact = featuredTaskArtifact(item.props.snapshot.artifacts);
|
|
18
|
+
if (artifact?.type !== "image" && artifact?.type !== "video" || artifact.naturalWidth && artifact.naturalHeight) return null;
|
|
19
|
+
return {
|
|
20
|
+
id,
|
|
21
|
+
type: artifact.type,
|
|
22
|
+
source: {
|
|
23
|
+
kind: "url",
|
|
24
|
+
value: artifact.url
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function probeBoardMediaSize(target, options = {}) {
|
|
29
|
+
const { type, source } = target;
|
|
30
|
+
try {
|
|
31
|
+
const resolved = source.kind === "url" ? source.value : await options.resolveFile?.(source.value, type, options.signal);
|
|
32
|
+
if (typeof resolved !== "string") return resolved ?? null;
|
|
33
|
+
return await probeMediaSize(resolved, type, { signal: options.signal });
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const CONCURRENCY = 8;
|
|
39
|
+
/** Probes each unique media source once; unresolved items are left as is. */
|
|
40
|
+
async function settleBoardMediaSizes(items, options = {}) {
|
|
41
|
+
const targets = Object.entries(items).flatMap(([id, item]) => boardMediaTarget(id, item) ?? []);
|
|
42
|
+
const signal = AbortSignal.timeout(options.timeoutMs ?? 5e3);
|
|
43
|
+
const probes = /* @__PURE__ */ new Map();
|
|
44
|
+
const settled = {};
|
|
45
|
+
let next = 0;
|
|
46
|
+
const work = async () => {
|
|
47
|
+
for (let target = targets[next++]; target; target = targets[next++]) {
|
|
48
|
+
const key = `${target.type}:${target.source.kind}:${target.source.value}`;
|
|
49
|
+
const probe = probes.get(key) ?? probeBoardMediaSize(target, {
|
|
50
|
+
...options,
|
|
51
|
+
signal
|
|
52
|
+
});
|
|
53
|
+
probes.set(key, probe);
|
|
54
|
+
const size = await probe;
|
|
55
|
+
const item = items[target.id];
|
|
56
|
+
const adopted = size && item && adoptBoardNaturalSize(item, size);
|
|
57
|
+
if (adopted) settled[target.id] = adopted;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
await Promise.all(Array.from({ length: CONCURRENCY }, work));
|
|
61
|
+
return settled;
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { boardMediaTarget, probeBoardMediaSize, settleBoardMediaSizes };
|
|
@@ -13,6 +13,7 @@ type BoardColorEntry = {
|
|
|
13
13
|
dark: BoardColorValue;
|
|
14
14
|
light: BoardColorValue;
|
|
15
15
|
};
|
|
16
|
+
/** Swatches with the colors of the default dark and light themes. */
|
|
16
17
|
declare const BOARD_COLORS: readonly BoardColorEntry[];
|
|
17
18
|
declare const DEFAULT_BOARD_COLOR: BoardColorId;
|
|
18
19
|
declare function isBoardColorId(value: unknown): value is BoardColorId;
|
|
@@ -1,134 +1,24 @@
|
|
|
1
|
+
import { BOARD_COLOR_TOKENS } from "../../protocol/dist/board-model.js";
|
|
2
|
+
import { BOARD_THEME_DATA } from "./themes.js";
|
|
1
3
|
//#region src/board/model/palette.ts
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
id: "neutral",
|
|
21
|
-
label: "Neutral",
|
|
22
|
-
dark: {
|
|
23
|
-
stroke: 10133670,
|
|
24
|
-
fill: 10133670,
|
|
25
|
-
label: LABEL_DARK
|
|
26
|
-
},
|
|
27
|
-
light: {
|
|
28
|
-
stroke: 6251368,
|
|
29
|
-
fill: 6251368,
|
|
30
|
-
label: LABEL_LIGHT
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: "black",
|
|
35
|
-
label: "Black",
|
|
36
|
-
dark: {
|
|
37
|
-
stroke: 0,
|
|
38
|
-
fill: 0,
|
|
39
|
-
label: LABEL_DARK
|
|
40
|
-
},
|
|
41
|
-
light: {
|
|
42
|
-
stroke: 0,
|
|
43
|
-
fill: 0,
|
|
44
|
-
label: LABEL_LIGHT
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
id: "white",
|
|
49
|
-
label: "White",
|
|
50
|
-
dark: {
|
|
51
|
-
stroke: 16777215,
|
|
52
|
-
fill: 16777215,
|
|
53
|
-
label: LABEL_DARK
|
|
54
|
-
},
|
|
55
|
-
light: {
|
|
56
|
-
stroke: 16777215,
|
|
57
|
-
fill: 16777215,
|
|
58
|
-
label: LABEL_LIGHT
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
id: "blue",
|
|
63
|
-
label: "Blue",
|
|
64
|
-
dark: {
|
|
65
|
-
stroke: 3718648,
|
|
66
|
-
fill: 3718648,
|
|
67
|
-
label: LABEL_DARK
|
|
68
|
-
},
|
|
69
|
-
light: {
|
|
70
|
-
stroke: 2450411,
|
|
71
|
-
fill: 2450411,
|
|
72
|
-
label: LABEL_LIGHT
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
id: "green",
|
|
77
|
-
label: "Green",
|
|
78
|
-
dark: {
|
|
79
|
-
stroke: 3462041,
|
|
80
|
-
fill: 3462041,
|
|
81
|
-
label: LABEL_DARK
|
|
82
|
-
},
|
|
83
|
-
light: {
|
|
84
|
-
stroke: 1483594,
|
|
85
|
-
fill: 1483594,
|
|
86
|
-
label: LABEL_LIGHT
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
id: "amber",
|
|
91
|
-
label: "Amber",
|
|
92
|
-
dark: {
|
|
93
|
-
stroke: 16096779,
|
|
94
|
-
fill: 16096779,
|
|
95
|
-
label: LABEL_DARK
|
|
96
|
-
},
|
|
97
|
-
light: {
|
|
98
|
-
stroke: 14251782,
|
|
99
|
-
fill: 14251782,
|
|
100
|
-
label: LABEL_LIGHT
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
id: "violet",
|
|
105
|
-
label: "Violet",
|
|
106
|
-
dark: {
|
|
107
|
-
stroke: 10980346,
|
|
108
|
-
fill: 10980346,
|
|
109
|
-
label: LABEL_DARK
|
|
110
|
-
},
|
|
111
|
-
light: {
|
|
112
|
-
stroke: 8141549,
|
|
113
|
-
fill: 8141549,
|
|
114
|
-
label: LABEL_LIGHT
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
id: "rose",
|
|
119
|
-
label: "Rose",
|
|
120
|
-
dark: {
|
|
121
|
-
stroke: 16478597,
|
|
122
|
-
fill: 16478597,
|
|
123
|
-
label: LABEL_DARK
|
|
124
|
-
},
|
|
125
|
-
light: {
|
|
126
|
-
stroke: 14753096,
|
|
127
|
-
fill: 14753096,
|
|
128
|
-
label: LABEL_LIGHT
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
];
|
|
4
|
+
const COLOR_LABELS = {
|
|
5
|
+
brand: "Brand",
|
|
6
|
+
neutral: "Neutral",
|
|
7
|
+
black: "Black",
|
|
8
|
+
white: "White",
|
|
9
|
+
blue: "Blue",
|
|
10
|
+
green: "Green",
|
|
11
|
+
amber: "Amber",
|
|
12
|
+
violet: "Violet",
|
|
13
|
+
rose: "Rose"
|
|
14
|
+
};
|
|
15
|
+
/** Swatches with the colors of the default dark and light themes. */
|
|
16
|
+
const BOARD_COLORS = BOARD_COLOR_TOKENS.map((id) => ({
|
|
17
|
+
id,
|
|
18
|
+
label: COLOR_LABELS[id],
|
|
19
|
+
dark: { ...BOARD_THEME_DATA.dark.colors[id] },
|
|
20
|
+
light: { ...BOARD_THEME_DATA.light.colors[id] }
|
|
21
|
+
}));
|
|
132
22
|
const DEFAULT_BOARD_COLOR = "brand";
|
|
133
23
|
const COLOR_INDEX = new Map(BOARD_COLORS.map((entry) => [entry.id, entry]));
|
|
134
24
|
function isBoardColorId(value) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { arrowBindings } from "../../protocol/dist/board-layout.js";
|
|
2
|
-
import { cameraForFocus, cameraForState } from "./geometry.js";
|
|
3
2
|
import { applyBoardEvaluation, boardAnimationTime, compileBoardAnimations, evaluateBoardAnimations } from "./animation.js";
|
|
4
3
|
import { buildBoardScene } from "./scene.js";
|
|
4
|
+
import { cameraForFocus, cameraForState } from "./geometry.js";
|
|
5
5
|
//#region src/board/model/sampling.ts
|
|
6
6
|
function createBoardAnimationSampler(document, animation, options = {}) {
|
|
7
7
|
const selected = animation ? document.animations[animation] : void 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { clampBoardFontSize } from "../../protocol/dist/board-layout.js";
|
|
1
|
+
import { BoardTextLayout, clampBoardFontSize } from "../../protocol/dist/board-layout.js";
|
|
2
2
|
import "../../protocol/dist/index.js";
|
|
3
3
|
//#region src/board/model/text-metrics.d.ts
|
|
4
|
-
declare const TEXT_FONT_FAMILY = "Geist";
|
|
4
|
+
declare const TEXT_FONT_FAMILY = "Geist Variable";
|
|
5
5
|
declare const TEXT_FONT_SIZE = 24;
|
|
6
6
|
declare const TEXT_LINE_HEIGHT = 32;
|
|
7
7
|
declare const TEXT_MIN_FONT_SIZE = 2;
|
|
@@ -11,5 +11,30 @@ declare function boardFontFamily(font: string, stacks: {
|
|
|
11
11
|
serif: string;
|
|
12
12
|
mono: string;
|
|
13
13
|
}): string;
|
|
14
|
+
declare const SHAPE_LABEL_PADDING = 8;
|
|
15
|
+
declare function layoutShapeLabel(props: {
|
|
16
|
+
text: string;
|
|
17
|
+
fontSize: number;
|
|
18
|
+
}, width: number): BoardTextLayout;
|
|
19
|
+
declare const BOARD_FRAME_LABEL_SIZE = 12;
|
|
20
|
+
declare const BOARD_FRAME_LABEL_LINE_HEIGHT = 1.25;
|
|
21
|
+
declare function frameLabelOffset(size: number): {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
};
|
|
25
|
+
declare function frameLabelHitRect(frame: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
width: number;
|
|
29
|
+
}, size: number): {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
};
|
|
35
|
+
declare function boardEditableText(item: {
|
|
36
|
+
type: string;
|
|
37
|
+
props: unknown;
|
|
38
|
+
}): string | null;
|
|
14
39
|
//#endregion
|
|
15
|
-
export { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily, clampBoardFontSize as clampBoardTextFontSize };
|
|
40
|
+
export { 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, clampBoardFontSize as clampBoardTextFontSize, frameLabelHitRect, frameLabelOffset, layoutShapeLabel };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BOARD_TEXT_FONT_FAMILY } from "../../protocol/dist/board-constants.js";
|
|
2
|
-
import { clampBoardFontSize } from "../../protocol/dist/board-layout.js";
|
|
2
|
+
import { clampBoardFontSize, layoutBoardText } from "../../protocol/dist/board-layout.js";
|
|
3
3
|
//#region src/board/model/text-metrics.ts
|
|
4
4
|
const TEXT_FONT_FAMILY = BOARD_TEXT_FONT_FAMILY;
|
|
5
5
|
const TEXT_FONT_SIZE = 24;
|
|
@@ -10,5 +10,39 @@ function boardFontFamily(font, stacks) {
|
|
|
10
10
|
if (font === "sans" || font === "serif" || font === "mono") return stacks[font];
|
|
11
11
|
return `"${font.replaceAll("\"", "")}", ${stacks.sans}`;
|
|
12
12
|
}
|
|
13
|
+
const SHAPE_LABEL_PADDING = 8;
|
|
14
|
+
function layoutShapeLabel(props, width) {
|
|
15
|
+
return layoutBoardText({
|
|
16
|
+
text: props.text,
|
|
17
|
+
fontSize: props.fontSize,
|
|
18
|
+
fontWeight: 500,
|
|
19
|
+
font: "sans",
|
|
20
|
+
lineHeight: 1.4,
|
|
21
|
+
width: Math.max(1, width - 16)
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const BOARD_FRAME_LABEL_SIZE = 12;
|
|
25
|
+
const BOARD_FRAME_LABEL_LINE_HEIGHT = 1.25;
|
|
26
|
+
function frameLabelOffset(size) {
|
|
27
|
+
return {
|
|
28
|
+
x: 4,
|
|
29
|
+
y: -(size + 6)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function frameLabelHitRect(frame, size) {
|
|
33
|
+
const above = size + 10;
|
|
34
|
+
return {
|
|
35
|
+
x: frame.x,
|
|
36
|
+
y: frame.y - above,
|
|
37
|
+
width: Math.max(48, frame.width * .5),
|
|
38
|
+
height: above + 2
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function boardEditableText(item) {
|
|
42
|
+
const props = item.props;
|
|
43
|
+
if (item.type === "text" || item.type === "shape") return props.text ?? "";
|
|
44
|
+
if (item.type === "arrow" || item.type === "frame") return props.label ?? "";
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
13
47
|
//#endregion
|
|
14
|
-
export { TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, boardFontFamily, clampBoardFontSize as clampBoardTextFontSize };
|
|
48
|
+
export { 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, clampBoardFontSize as clampBoardTextFontSize, frameLabelHitRect, frameLabelOffset, layoutShapeLabel };
|