@neta-art/cohub 11.1.0 → 11.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.
Files changed (78) hide show
  1. package/dist/board/editor/context.d.ts +1 -0
  2. package/dist/board/editor/context.js +1 -0
  3. package/dist/board/editor/editor.d.ts +1 -0
  4. package/dist/board/editor/editor.js +7 -0
  5. package/dist/board/editor/interaction.d.ts +4 -0
  6. package/dist/board/editor/interaction.js +16 -7
  7. package/dist/board/editor/selection-transform.d.ts +1 -1
  8. package/dist/board/editor/selection-transform.js +13 -2
  9. package/dist/board/export/index.d.ts +2 -0
  10. package/dist/board/export/index.js +1 -0
  11. package/dist/board/export/scene.d.ts +2 -0
  12. package/dist/board/export/scene.js +4 -0
  13. package/dist/board/model/file-preview.d.ts +0 -1
  14. package/dist/board/model/file-preview.js +10 -1
  15. package/dist/board/model/index.d.ts +2 -1
  16. package/dist/board/model/index.js +2 -1
  17. package/dist/board/model/script-api.d.ts +69 -0
  18. package/dist/board/model/script-api.js +77 -0
  19. package/dist/board/render/audio-waveform.d.ts +1 -1
  20. package/dist/board/render/audio-waveform.js +8 -5
  21. package/dist/board/render/card-tag.d.ts +24 -0
  22. package/dist/board/render/card-tag.js +205 -0
  23. package/dist/board/render/index.d.ts +7 -4
  24. package/dist/board/render/index.js +7 -4
  25. package/dist/board/render/media-interaction.d.ts +2 -1
  26. package/dist/board/render/media-interaction.js +14 -6
  27. package/dist/board/render/palette.js +2 -2
  28. package/dist/board/render/renderers/arrow-card-renderer.js +20 -16
  29. package/dist/board/render/renderers/audio-card-renderer.d.ts +8 -1
  30. package/dist/board/render/renderers/audio-card-renderer.js +64 -60
  31. package/dist/board/render/renderers/base-card-renderer.d.ts +1 -26
  32. package/dist/board/render/renderers/base-card-renderer.js +6 -92
  33. package/dist/board/render/renderers/board-renderer-registry.d.ts +8 -0
  34. package/dist/board/render/renderers/board-renderer-registry.js +3 -3
  35. package/dist/board/render/renderers/custom-card-renderer.js +4 -7
  36. package/dist/board/render/renderers/effect-card-renderer.js +0 -5
  37. package/dist/board/render/renderers/file-card-renderer.d.ts +1 -11
  38. package/dist/board/render/renderers/file-card-renderer.js +43 -105
  39. package/dist/board/render/renderers/frame-card-renderer.js +14 -15
  40. package/dist/board/render/renderers/image-card-renderer.js +62 -67
  41. package/dist/board/render/renderers/media-key.d.ts +6 -0
  42. package/dist/board/render/renderers/media-key.js +39 -0
  43. package/dist/board/render/renderers/shape-card-renderer.js +6 -12
  44. package/dist/board/render/renderers/task-card-renderer.d.ts +1 -9
  45. package/dist/board/render/renderers/task-card-renderer.js +82 -56
  46. package/dist/board/render/renderers/unknown-card-renderer.js +17 -16
  47. package/dist/board/render/renderers/video-card-renderer.js +73 -80
  48. package/dist/board/render/stroke.d.ts +1 -1
  49. package/dist/board/render/stroke.js +5 -4
  50. package/dist/board/render/style.d.ts +29 -0
  51. package/dist/board/render/style.js +54 -0
  52. package/dist/board/render/surface.d.ts +34 -0
  53. package/dist/board/render/surface.js +132 -0
  54. package/dist/board/render/text-fit.d.ts +8 -0
  55. package/dist/board/render/text-fit.js +60 -0
  56. package/dist/board/render/text-resolution.d.ts +2 -1
  57. package/dist/board/render/text-resolution.js +4 -1
  58. package/dist/board/stage/index.d.ts +3 -2
  59. package/dist/board/stage/index.js +2 -1
  60. package/dist/board/stage/overlay.d.ts +41 -0
  61. package/dist/board/stage/overlay.js +182 -0
  62. package/dist/board/stage/scene.d.ts +2 -43
  63. package/dist/board/stage/scene.js +23 -131
  64. package/dist/board/stage/stage.d.ts +2 -0
  65. package/dist/board/stage/stage.js +99 -32
  66. package/dist/chunks/app-realtime.js +1697 -0
  67. package/dist/chunks/environment.d.ts +997 -3
  68. package/dist/chunks/http.d.ts +393 -3
  69. package/dist/chunks/http.js +40 -1
  70. package/dist/chunks/websocket.d.ts +4 -0
  71. package/dist/chunks/websocket.js +11 -2
  72. package/dist/http.d.ts +2 -2
  73. package/dist/index.d.ts +4 -323
  74. package/dist/index.js +58 -1660
  75. package/dist/protocol/dist/board-model.js +51 -51
  76. package/dist/protocol/dist/board-schema.d.ts +1 -2
  77. package/dist/protocol/dist/board-schema.js +7 -22
  78. package/package.json +2 -1
@@ -40,6 +40,7 @@ type BoardEditorState = {
40
40
  width: number;
41
41
  height: number;
42
42
  };
43
+ controlOutset: number;
43
44
  cameraPolicy: BoardCameraPolicy;
44
45
  tool: BoardToolId;
45
46
  toolStyles: BoardToolStyleMap;
@@ -8,6 +8,7 @@ const STATE_CHANNELS = {
8
8
  selection: "selection",
9
9
  camera: "camera",
10
10
  surfaceSize: "camera",
11
+ controlOutset: "selection",
11
12
  cameraPolicy: "camera",
12
13
  tool: "tool",
13
14
  toolStyles: "tool",
@@ -126,6 +126,7 @@ declare function createBoardEditor(options: BoardEditorOptions): {
126
126
  width: number;
127
127
  height: number;
128
128
  };
129
+ controlOutset: number;
129
130
  loadDocument: (next: BoardDocument, key?: string) => void;
130
131
  undo: () => void;
131
132
  redo: () => void;
@@ -53,6 +53,7 @@ function createBoardEditor(options) {
53
53
  width: 0,
54
54
  height: 0
55
55
  },
56
+ controlOutset: 0,
56
57
  cameraPolicy: preferences?.cameraPolicy ?? "follow",
57
58
  tool: options.initialTool ?? "select",
58
59
  toolStyles: preferences?.toolStyles ?? createBoardToolStyles(),
@@ -339,6 +340,12 @@ function createBoardEditor(options) {
339
340
  set surfaceSize(value) {
340
341
  state.surfaceSize = value;
341
342
  },
343
+ get controlOutset() {
344
+ return read("selection", () => state.controlOutset);
345
+ },
346
+ set controlOutset(value) {
347
+ if (value !== state.controlOutset) state.controlOutset = value;
348
+ },
342
349
  loadDocument: remote.loadDocument,
343
350
  undo: document.undo,
344
351
  redo: document.redo,
@@ -28,6 +28,10 @@ type BoardInteraction = {
28
28
  single: BoardFrame | null;
29
29
  bounds: Rect;
30
30
  origin: Map<string, BoardFrame>;
31
+ grab: {
32
+ x: number;
33
+ y: number;
34
+ };
31
35
  moved: boolean;
32
36
  } | {
33
37
  type: "rotating";
@@ -1,4 +1,4 @@
1
- import { clampZoom, normalizeRotation, panBy, rectCenter, rectsIntersect, resizeFrame, rotateFrames, scaleFrames, screenPoint, selectionBounds, worldPoint, zoomAround } from "../model/geometry.js";
1
+ import { clampZoom, frameHandlePosition, normalizeRotation, panBy, rectCenter, rectsIntersect, resizeFrame, rotateFrames, scaleFrames, screenPoint, selectionBounds, worldPoint, zoomAround } from "../model/geometry.js";
2
2
  import { resolveSceneArrow } from "../model/arrow-geometry.js";
3
3
  import { appendBoardDrawSamples } from "../model/draw-input.js";
4
4
  import { createBoardItemId } from "../model/items/id.js";
@@ -51,8 +51,9 @@ function createInteractionModule(ctx) {
51
51
  state.hoverPoint,
52
52
  state.hoverPointerType,
53
53
  state.camera.zoom,
54
- ctx.selection.transform()
55
- ], (interaction, tool, hoverPoint, pointerType, zoom, transform) => interaction.type === "idle" && !pinch && tool === "select" && hoverPoint ? selectionTransformControlAt(transform, hoverPoint, zoom, pointerType) : null);
54
+ ctx.selection.transform(),
55
+ state.controlOutset
56
+ ], (interaction, tool, hoverPoint, pointerType, zoom, transform, outset) => interaction.type === "idle" && !pinch && tool === "select" && hoverPoint ? selectionTransformControlAt(transform, hoverPoint, zoom, pointerType, outset) : null);
56
57
  function gridSnapSize() {
57
58
  const grid = state.base.board.grid;
58
59
  return grid?.visible === true ? grid.size ?? 0 : 0;
@@ -244,7 +245,8 @@ function createInteractionModule(ctx) {
244
245
  return;
245
246
  }
246
247
  const bounds = ctx.selection.bounds();
247
- const control = selectionTransformControlAt(ctx.selection.transform(), event.world, camera.zoom, event.pointerType);
248
+ const transform = ctx.selection.transform();
249
+ const control = selectionTransformControlAt(transform, event.world, camera.zoom, event.pointerType, state.controlOutset);
248
250
  if (control?.kind === "rotate" && bounds) {
249
251
  const pivot = rectCenter(bounds);
250
252
  state.interaction = {
@@ -257,15 +259,21 @@ function createInteractionModule(ctx) {
257
259
  };
258
260
  return;
259
261
  }
260
- if (control?.kind === "resize" && bounds) {
262
+ if (control?.kind === "resize" && bounds && transform) {
261
263
  const origin = ctx.selection.framesFor(ctx.selection.movable());
262
264
  const single = origin.size === 1 ? { ...[...origin.values()][0] } : null;
265
+ const edge = frameHandlePosition(transform.frame, control.handle);
266
+ const grab = {
267
+ x: edge.x - event.world.x,
268
+ y: edge.y - event.world.y
269
+ };
263
270
  state.interaction = {
264
271
  type: "resizing",
265
272
  handle: control.handle,
266
273
  single,
267
274
  bounds,
268
275
  origin,
276
+ grab,
269
277
  moved: false
270
278
  };
271
279
  return;
@@ -349,13 +357,14 @@ function createInteractionModule(ctx) {
349
357
  moved: true
350
358
  };
351
359
  const frames = /* @__PURE__ */ new Map();
360
+ const point = worldPoint(event.world.x + gesture.grab.x, event.world.y + gesture.grab.y);
352
361
  if (gesture.single) {
353
362
  const id = [...gesture.origin.keys()][0];
354
363
  const item = state.scene.get(id);
355
364
  const keepAspect = item ? registry.capabilities(item).aspectLocked || event.shiftKey : event.shiftKey;
356
- frames.set(id, resizeFrame(gesture.single, gesture.handle, event.world, void 0, keepAspect));
365
+ frames.set(id, resizeFrame(gesture.single, gesture.handle, point, void 0, keepAspect));
357
366
  } else {
358
- const scaled = scaleFrames([...gesture.origin.values()], gesture.bounds, gesture.handle, event.world);
367
+ const scaled = scaleFrames([...gesture.origin.values()], gesture.bounds, gesture.handle, point);
359
368
  [...gesture.origin.keys()].forEach((id, index) => {
360
369
  const frame = scaled[index];
361
370
  if (frame) frames.set(id, frame);
@@ -19,6 +19,6 @@ type BoardSelectionTransform = {
19
19
  canRotate: boolean;
20
20
  };
21
21
  declare function resolveSelectionTransform(registry: BoardRegistry, items: BoardSceneItem[], bounds: Rect | null): BoardSelectionTransform | null;
22
- declare function selectionTransformControlAt(transform: BoardSelectionTransform | null, point: WorldPoint, zoom: number, pointerType: string): BoardTransformControl | null;
22
+ declare function selectionTransformControlAt(selection: BoardSelectionTransform | null, point: WorldPoint, zoom: number, pointerType: string, outset?: number): BoardTransformControl | null;
23
23
  //#endregion
24
24
  export { BoardSelectionTransform, BoardTransformControl, resizeCursorForHandle, resolveSelectionTransform, selectionTransformControlAt };
@@ -51,10 +51,21 @@ function controlHitRadius(pointerType) {
51
51
  if (pointerType === "pen") return 12;
52
52
  return 8;
53
53
  }
54
- function selectionTransformControlAt(transform, point, zoom, pointerType) {
55
- if (!transform) return null;
54
+ function selectionTransformControlAt(selection, point, zoom, pointerType, outset = 0) {
55
+ if (!selection) return null;
56
56
  const screenRadius = controlHitRadius(pointerType);
57
57
  const radius = screenRadius / Math.max(zoom, 1e-4);
58
+ const grow = outset / Math.max(zoom, 1e-4);
59
+ const transform = grow > 0 ? {
60
+ ...selection,
61
+ frame: {
62
+ ...selection.frame,
63
+ x: selection.frame.x - grow,
64
+ y: selection.frame.y - grow,
65
+ width: selection.frame.width + grow * 2,
66
+ height: selection.frame.height + grow * 2
67
+ }
68
+ } : selection;
58
69
  if (transform.resizeMode !== "none") for (const handle of CORNER_RESIZE_HANDLES) {
59
70
  const position = frameHandlePosition(transform.frame, handle);
60
71
  if (Math.hypot(position.x - point.x, position.y - point.y) <= radius) return {
@@ -6,6 +6,7 @@ import { BoardEvaluation } from "../model/animation.js";
6
6
  import { BoardAnimationSampler } from "../model/sampling.js";
7
7
  import { BoardExportPlan, BoardExportPlanInput, BoardExportRegion } from "../model/export-plan.js";
8
8
  import { BoardShapeColors } from "../model/palette.js";
9
+ import { BoardRenderStyle } from "../render/style.js";
9
10
  import { BoardCardRendererResolver, BoardRenderPalette, BoardScriptHost } from "../render/renderers/board-renderer-registry.js";
10
11
  import "../render/index.js";
11
12
  import { BoardExportScene, BoardExportSceneInput, createBoardExportScene } from "./scene.js";
@@ -29,6 +30,7 @@ type BoardExportOptions = {
29
30
  background?: BoardExportBackground;
30
31
  palette?: Partial<BoardRenderPalette>;
31
32
  colors?: BoardShapeColors;
33
+ style?: Partial<BoardRenderStyle>;
32
34
  textures?: Map<string, Texture>;
33
35
  scripts?: BoardScriptHost;
34
36
  assetKey?: (item: BoardSceneItem) => string | null;
@@ -76,6 +76,7 @@ function renderBoardExport(renderer, input, options = {}) {
76
76
  colorScheme,
77
77
  palette,
78
78
  colors: options.colors,
79
+ style: options.style,
79
80
  textures: options.textures,
80
81
  scripts: options.scripts,
81
82
  assetKey: options.assetKey,
@@ -3,6 +3,7 @@ import "../../protocol/dist/index.js";
3
3
  import { Rect } from "../model/geometry.js";
4
4
  import { BoardScene, BoardSceneItem } from "../model/scene.js";
5
5
  import { BoardShapeColors } from "../model/palette.js";
6
+ import { BoardRenderStyle } from "../render/style.js";
6
7
  import { BoardCardRendererResolver, BoardRenderContext, BoardRenderPalette } from "../render/renderers/board-renderer-registry.js";
7
8
  import "../render/index.js";
8
9
  import { Container, Texture } from "pixi.js";
@@ -18,6 +19,7 @@ type BoardExportSceneInput = {
18
19
  colorScheme: "dark" | "light";
19
20
  palette?: Partial<BoardRenderPalette>;
20
21
  colors?: BoardShapeColors;
22
+ style?: Partial<BoardRenderStyle>;
21
23
  textures?: Map<string, Texture>;
22
24
  scripts?: BoardRenderContext["scripts"];
23
25
  assetKey?: (item: BoardSceneItem) => string | null;
@@ -3,6 +3,7 @@ import { imageAssetKey } from "../model/image-key.js";
3
3
  import { defaultBoardPalette } from "../render/palette.js";
4
4
  import { clippingAncestor, isClippingFrame, syncClipGroup } from "../render/clip.js";
5
5
  import { DEFAULT_BOARD_RENDER_LABELS, getBoardCardRenderer } from "../render/renderers/board-renderer-registry.js";
6
+ import { resolveBoardRenderStyle } from "../render/style.js";
6
7
  import { Container, Graphics, Sprite, TilingSprite } from "pixi.js";
7
8
  //#region src/board/export/scene.ts
8
9
  function buildContext(input) {
@@ -17,12 +18,15 @@ function buildContext(input) {
17
18
  selectedIds: /* @__PURE__ */ new Set(),
18
19
  hoveredId: null,
19
20
  resizingIds: /* @__PURE__ */ new Set(),
21
+ liftedIds: /* @__PURE__ */ new Set(),
20
22
  palette: {
21
23
  ...defaultBoardPalette(input.colorScheme),
22
24
  ...input.palette
23
25
  },
24
26
  colors: input.colors ?? buildFallbackShapeColors(input.colorScheme),
25
27
  colorScheme: input.colorScheme,
28
+ style: resolveBoardRenderStyle(input.colorScheme, input.style),
29
+ themeKey: "export",
26
30
  rendererType: "canvas",
27
31
  zoom: input.scale,
28
32
  reducedMotion: true,
@@ -7,7 +7,6 @@ type FilePreviewKind = "cover" | "text" | "blank";
7
7
  * sync with them.
8
8
  */
9
9
  declare function filePreviewKind(snapshot: BoardFileSnapshotFacts | undefined): FilePreviewKind;
10
- /** Short uppercase type label for a file card (`MD`, `JSON`, `FILE`). */
11
10
  declare function fileTypeLabel(path: string): string;
12
11
  /** Human-readable byte size. Kept as a public helper for custom card renderers. */
13
12
  declare function formatFileSize(bytes: number | undefined): string;
@@ -11,13 +11,22 @@ function filePreviewKind(snapshot) {
11
11
  if (snapshot.excerpt) return "text";
12
12
  return "blank";
13
13
  }
14
- /** Short uppercase type label for a file card (`MD`, `JSON`, `FILE`). */
15
14
  function fileTypeLabel(path) {
15
+ if (isWebPageUrl(path)) return "LINK";
16
16
  const name = fileBaseName(path);
17
17
  const dot = name.lastIndexOf(".");
18
18
  if (dot <= 0) return (name.replace(/^\./, "") || "file").toUpperCase();
19
19
  return name.slice(dot + 1).toUpperCase();
20
20
  }
21
+ function isWebPageUrl(path) {
22
+ if (!/^https?:\/\//i.test(path)) return false;
23
+ try {
24
+ const last = new URL(path).pathname.split("/").filter(Boolean).pop() ?? "";
25
+ return !/\.[a-z\d]{1,8}$/i.test(last);
26
+ } catch {
27
+ return false;
28
+ }
29
+ }
21
30
  /** Human-readable byte size. Kept as a public helper for custom card renderers. */
22
31
  function formatFileSize(bytes) {
23
32
  if (bytes === void 0 || !Number.isFinite(bytes) || bytes < 0) return "";
@@ -13,6 +13,7 @@ import { BoardScriptAnchor, BoardScriptContext, BoardScriptEvent, BoardScriptEve
13
13
  import { boardScriptItems, hasBoardScripts } from "./script-index.js";
14
14
  import { BoardScene, BoardSceneItem, SceneItem, buildBoardScene, orderBoardItems, placeItem, refreshBoardScene, sceneItemToItem, sceneItemsToRecord, toSceneItem } from "./scene.js";
15
15
  import { boardScriptHitVisible, boardScriptTarget, resolveBoardScriptHit } from "./script-hit.js";
16
+ import { BOARD_SCRIPT_API } from "./script-api.js";
16
17
  import { BOARD_SCRIPT_DRAWING_EXAMPLE } from "./script-example.js";
17
18
  import { boardScriptScope, composeBoardScriptItems, prepareBoardScriptOutput, scriptTemporaryPrefix, validateBoardScriptCommit, validateBoardScriptOutput } from "./script-scene.js";
18
19
  import { BoardCameraOverride, BoardColorResolver, BoardEaseFunction, BoardEvaluateOptions, BoardEvaluation, CompiledAnimation, CompiledBoardAnimations, CompiledTrack, applyBoardEvaluation, boardAnimationTime, boardDocumentAt, boardEase, compileBoardAnimations, evaluateBoardAnimations, parseHexColor, sampleBoardTrack } from "./animation.js";
@@ -40,4 +41,4 @@ import "./items/index.js";
40
41
  import { BoardMediaKind, getMediaExtension, getMediaResourceTitle, inferBoardMediaKind } from "./media.js";
41
42
  import { BoardAssetSource, BoardPlayableMedia, playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache, resolveBoardMediaUrl } from "./media-playback.js";
42
43
  import { BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
43
- export { ARROW_BINDING_GAP, ArrowFrameLookup, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_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, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSampler, BoardAnimationSchema, BoardAppMetadata, BoardApplyOptions, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAssetSource, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardCameraFit, BoardCameraFocus, BoardCameraOverride, BoardCameraState, BoardChapter, BoardColor, BoardColorEntry, BoardColorId, BoardColorResolver, BoardColorSchema, BoardColorToken, BoardColorValue, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawInputSample, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseFunction, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardEvaluateOptions, BoardEvaluation, BoardExportAssetSelection, BoardExportPlan, BoardExportPlanInput, BoardExportRegion, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, type BoardFileSnapshotFacts, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemLookup, BoardItemOf, BoardItemResizeMode, BoardItemType, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaItemKind, BoardMediaKind, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardNestedAnimationOptions, BoardNormalizedPoint, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlacement, BoardPlayMode, BoardPlayableMedia, BoardPresetName, BoardPresetOptions, BoardPropertySpec, BoardRect, BoardRegistry, BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, BoardScene, BoardSceneItem, BoardScreenOffset, BoardScreenPoint, BoardScript, BoardScriptAnchor, BoardScriptContext, BoardScriptEvent, BoardScriptEventOf, BoardScriptFrame, BoardScriptHit, BoardScriptHostEvents, BoardScriptItemPatch, BoardScriptModule, BoardScriptOutput, BoardScriptParameter, BoardScriptSceneOptions, BoardScriptSchema, BoardScriptSnapshot, BoardScriptView, BoardSettings, BoardSettingsSchema, BoardShapeColors, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardStyledToolId, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, type BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardToolStyleMap, BoardToolStylePatch, BoardTrack, BoardTrackSchema, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, type BuildSnapshotInput, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CompiledAnimation, CompiledBoardAnimations, CompiledTrack, CornerResizeHandle, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, FileAvailability, type FileCategory, FilePreviewKind, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, ResizeHandle, ResolvedArrow, ResolvedArrowEnd, type ResolvedCover, SHAPE_KINDS, SceneItem, ScreenPoint, ShapeKind, Size, StrokeRibbonBuilder, StrokeRibbonGeometry, StrokeRibbonMesh, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, WorldPoint, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemOrigin, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskSource, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, 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, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, 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, 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, setBoardTextMeasurer, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
44
+ export { ARROW_BINDING_GAP, ArrowFrameLookup, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_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, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSampler, BoardAnimationSchema, BoardAppMetadata, BoardApplyOptions, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAssetSource, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardCameraFit, BoardCameraFocus, BoardCameraOverride, BoardCameraState, BoardChapter, BoardColor, BoardColorEntry, BoardColorId, BoardColorResolver, BoardColorSchema, BoardColorToken, BoardColorValue, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawInputSample, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseFunction, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardEvaluateOptions, BoardEvaluation, BoardExportAssetSelection, BoardExportPlan, BoardExportPlanInput, BoardExportRegion, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, type BoardFileSnapshotFacts, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemCapabilities, BoardItemDefinition, BoardItemEntry, BoardItemInput, BoardItemLookup, BoardItemOf, BoardItemResizeMode, BoardItemType, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaItemKind, BoardMediaKind, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardNestedAnimationOptions, BoardNormalizedPoint, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlacement, BoardPlayMode, BoardPlayableMedia, BoardPresetName, BoardPresetOptions, BoardPropertySpec, BoardRect, BoardRegistry, BoardReplayActorKind, BoardReplayEntry, BoardReplayPlayer, BoardScene, BoardSceneItem, BoardScreenOffset, BoardScreenPoint, BoardScript, BoardScriptAnchor, BoardScriptContext, BoardScriptEvent, BoardScriptEventOf, BoardScriptFrame, BoardScriptHit, BoardScriptHostEvents, BoardScriptItemPatch, BoardScriptModule, BoardScriptOutput, BoardScriptParameter, BoardScriptSceneOptions, BoardScriptSchema, BoardScriptSnapshot, BoardScriptView, BoardSettings, BoardSettingsSchema, BoardShapeColors, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardStyledToolId, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, type BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardToolStyleMap, BoardToolStylePatch, BoardTrack, BoardTrackSchema, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardWorldOffset, BoardWorldPoint, BoardWorldRect, type BuildSnapshotInput, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, CompiledAnimation, CompiledBoardAnimations, CompiledTrack, CornerResizeHandle, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, FileAvailability, type FileCategory, FilePreviewKind, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, Point, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, Rect, ResizeHandle, ResolvedArrow, ResolvedArrowEnd, type ResolvedCover, SHAPE_KINDS, SceneItem, ScreenPoint, ShapeKind, Size, StrokeRibbonBuilder, StrokeRibbonGeometry, StrokeRibbonMesh, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, WorldPoint, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemOrigin, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskSource, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, 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, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, 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, 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, setBoardTextMeasurer, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
@@ -11,6 +11,7 @@ import { boardScriptItems, hasBoardScripts } from "./script-index.js";
11
11
  import { CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, EDGE_RESIZE_HANDLES, FIT_PADDING, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, VIEWPORT_MARGIN_RATIO, angleFromCenter, cameraForFocus, cameraForRect, cameraForState, clamp, clampZoom, degToRad, expandRect, fitToContent, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, frameRayIntersection, frameRect, handlePosition, itemBounds, normalizeRotation, normalizeViewport, normalizedPoint, panBy, pointToWorld, pointsBounds, radToDeg, rectCenter, rectContainsPoint, rectForCameraFocus, rectsIntersect, resizeFrame, resizeFrameToSize, rotateFrames, rotatePointAround, rotationHandleAnchor, rotationHandlePosition, scaleFrames, screenOffset, screenPoint, screenToWorld, selectionBounds, stableCullRect, unionRects, visibleWorldRect, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround } from "./geometry.js";
12
12
  import { boardScriptScope, composeBoardScriptItems, prepareBoardScriptOutput, scriptTemporaryPrefix, validateBoardScriptCommit, validateBoardScriptOutput } from "./script-scene.js";
13
13
  import { boardScriptHitVisible, boardScriptTarget, resolveBoardScriptHit } from "./script-hit.js";
14
+ import { BOARD_SCRIPT_API } from "./script-api.js";
14
15
  import { BOARD_SCRIPT_DRAWING_EXAMPLE } from "./script-example.js";
15
16
  import { applyBoardEvaluation, boardAnimationTime, boardDocumentAt, boardEase, compileBoardAnimations, evaluateBoardAnimations, parseHexColor, sampleBoardTrack } from "./animation.js";
16
17
  import { buildBoardScene, orderBoardItems, placeItem, refreshBoardScene, sceneItemToItem, sceneItemsToRecord, toSceneItem } from "./scene.js";
@@ -37,4 +38,4 @@ import { boardItemOrigin, boardOriginKey, createAppBoardItem, createArrowBoardIt
37
38
  import { createBoardRegistry, defaultBoardRegistry } from "./items/registry.js";
38
39
  import { playableBoardMedia, playableBoardMediaList, resetBoardPlaybackUrlCache, resolveBoardMediaUrl } from "./media-playback.js";
39
40
  import { boardReplayActorKind, createBoardReplayPlayer } from "./replay.js";
40
- export { ARROW_BINDING_GAP, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_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, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, SHAPE_KINDS, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemOrigin, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskSource, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, 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, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, 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, 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, setBoardTextMeasurer, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
41
+ export { ARROW_BINDING_GAP, BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLORS, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXPORT_DEFAULT_PADDING, BOARD_EXPORT_DEFAULT_SCALE, BOARD_EXPORT_ITEM_WARN_THRESHOLD, BOARD_EXPORT_MAX_EDGE, BOARD_EXPORT_MAX_PIXELS, BOARD_EXPORT_MAX_TEXTURES, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_PRESET_NAMES, BOARD_SCHEMA_TARGETS, BOARD_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, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchorSchema, BoardArrowBindingSchema, BoardArrowEndSchema, BoardArrowItemSchema, BoardAudioItemSchema, BoardBackgroundSchema, BoardColorSchema, BoardCropSchema, BoardCustomItemSchema, BoardDrawItemSchema, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItemSchema, BoardExtensionItemSchema, BoardFileItemSchema, BoardFrameItemSchema, BoardIdSchema, BoardImageItemSchema, BoardKeySchema, BoardKeyframeSchema, BoardMarkerSchema, BoardMediaOriginSchema, BoardMediaSnapshotSchema, BoardMediaSourceSchema, BoardPatchSchema, BoardScriptSchema, BoardSettingsSchema, BoardShapeItemSchema, BoardSizeSchema, BoardStyleSchema, BoardTaskArtifactSchema, BoardTaskItemSchema, BoardTaskSnapshotSchema, BoardTextItemSchema, BoardTrackSchema, BoardVec2Schema, BoardVideoItemSchema, CORNER_RESIZE_HANDLES, CORNER_ROTATION_ZONE_WIDTH, DEFAULT_BOARD_COLOR, DEFAULT_BOARD_TOOL_STYLES, EDGE_RESIZE_HANDLES, FILE_EXCERPT_MAX_BYTES, FILE_EXCERPT_MAX_CHARS, FIT_PADDING, FULL_CAPABILITIES, HANDLE_DIRECTION, HANDLE_HIT_RADIUS, IDENTITY_MATRIX, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, MIN_ITEM_SIZE, RESIZE_HANDLES, ROTATION_HANDLE_OFFSET, SHAPE_KINDS, TEXT_FONT_FAMILY, TEXT_FONT_SIZE, TEXT_LINE_HEIGHT, TEXT_MAX_FONT_SIZE, TEXT_MIN_FONT_SIZE, VIEWPORT_MARGIN_RATIO, anchorPoint, angleFromCenter, appendBoardDrawSamples, applyBoardDelta, applyBoardEvaluation, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, arrowHitRadius, arrowPathBounds, autoAnchorSide, availabilityFromError, bendControl, boardAnimationTime, boardColorCssVar, boardDocumentAt, boardEase, boardFontFamily, boardImageKeySource, boardItemOrigin, boardItemSchema, boardJsonSchema, boardNestedAnimation, boardNestedAnimationTrack, boardOriginKey, boardPatchTouches, boardPathTrack, boardPresetTracks, boardReplayActorKind, boardSchemaOverview, boardScriptHitVisible, boardScriptItems, boardScriptScope, boardScriptTarget, boardSequence, boardSequencePatch, boardTaskSource, buildBoardScene, buildCodeExcerpt, buildFallbackShapeColors, buildFileExcerpt, buildFileSnapshot, buildStrokeOutline, buildStrokeRibbonGeometry, builtinBoardItems, cameraForFocus, cameraForRect, cameraForState, clamp, clampBoardFontSize, clampBoardStrokeSize, clampBoardFontSize as clampBoardTextFontSize, clampZoom, 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, emptyBoardDocument, estimateTextWidth, evaluateBoardAnimations, expandRect, exportItemBounds, featuredTaskArtifact, fileBaseName, fileCategory, fileCategoryAccent, fileMetaLine, filePreviewKind, filePreviewMemoKey, filePreviewScope, fileStem, fileTypeLabel, fitToContent, formatFileSize, frameContainsPoint, frameCornerRotationHandleAt, frameCorners, frameEdgeHandleAt, frameHandlePosition, framePoint, frameRayIntersection, frameRect, getMediaExtension, getMediaResourceTitle, handlePosition, hasAuthoredSize, hasBoardScripts, imageAssetKey, inferBoardMediaKind, invertMatrix, isArrowBinding, isBoardColorId, isBoardColorString, isBoardEase, isBoardPath, isBoardPresetName, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isFileSnapshotFresh, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, isShapeKind, isStrokeCorner, itemBounds, layoutBoardText, 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, 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, setBoardTextMeasurer, shouldFetchFileExcerpt, sideAnchor, simplifyDrawIndices, splitFrontmatter, stableCullRect, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, titleForBoardItem, toSceneItem, trackReferences, trimDrawPoints, unionRects, validateBoardScriptCommit, validateBoardScriptOutput, visibleWorldRect, withObservedArtifactFacts, worldOffset, worldPoint, worldRect, worldToScreen, zoomAround };
@@ -0,0 +1,69 @@
1
+ //#region src/board/model/script-api.d.ts
2
+ /**
3
+ * A compact reference for Board script authors, printed by `cohub boards schema script`.
4
+ * Each group is checked against its type, so a new member fails to compile until it is described.
5
+ */
6
+ declare const BOARD_SCRIPT_API: {
7
+ readonly runtime: readonly ["Modules are .js or .mjs Space files that import only literal relative paths (at most 64 modules, 2 MB).", "They run in a worker with no DOM or network. Use Apps for HTML content.", "Exports replay deterministically from ctx.onFrame, the frame clock, ctx.random() and ctx.state; timers, Date.now() and Math.random() do not."];
8
+ readonly module: {
9
+ draw: string;
10
+ animated: string;
11
+ parameters: string;
12
+ default: string;
13
+ };
14
+ readonly frame: {
15
+ t: string;
16
+ dt: string;
17
+ width: string;
18
+ height: string;
19
+ seed: string;
20
+ params: string;
21
+ state: string;
22
+ };
23
+ readonly context: {
24
+ self: string;
25
+ params: string;
26
+ targets: string;
27
+ state: string;
28
+ frame: string;
29
+ view: string;
30
+ random: string;
31
+ on: string;
32
+ onFrame: string;
33
+ onDispose: string;
34
+ invalidate: string;
35
+ get: string;
36
+ present: string;
37
+ scene: string;
38
+ hitRegions: string;
39
+ emit: string;
40
+ commit: string;
41
+ capabilities: string;
42
+ };
43
+ readonly scope: "The owner, a Frame owner's descendants, and script.targets.";
44
+ readonly hitRegions: {
45
+ readonly forms: readonly ["{ target: \"self\" }: the owner.", "{ item: id }: a scene item.", "{ x, y, width, height }: a rectangle in owner coordinates."];
46
+ readonly options: "label (also a keyboard focus target) and cursor.";
47
+ readonly rule: "Only declared regions receive input; everything else passes through to the Board. Event target is the region's key.";
48
+ };
49
+ readonly sceneOptions: {
50
+ space: string;
51
+ anchor: string;
52
+ };
53
+ readonly events: {
54
+ readonly input: "pointerenter, pointerleave, pointerdown, pointermove, pointerup, pointercancel, click, focus, blur, keydown, keyup. Pointer events carry point in owner coordinates; key events carry key.";
55
+ readonly host: {
56
+ selectionchange: string;
57
+ transformend: string;
58
+ viewchange: string;
59
+ };
60
+ };
61
+ readonly view: {
62
+ camera: string;
63
+ width: string;
64
+ height: string;
65
+ safeRect: string;
66
+ };
67
+ };
68
+ //#endregion
69
+ export { BOARD_SCRIPT_API };
@@ -0,0 +1,77 @@
1
+ //#region src/board/model/script-api.ts
2
+ /**
3
+ * A compact reference for Board script authors, printed by `cohub boards schema script`.
4
+ * Each group is checked against its type, so a new member fails to compile until it is described.
5
+ */
6
+ const BOARD_SCRIPT_API = {
7
+ runtime: [
8
+ "Modules are .js or .mjs Space files that import only literal relative paths (at most 64 modules, 2 MB).",
9
+ "They run in a worker with no DOM or network. Use Apps for HTML content.",
10
+ "Exports replay deterministically from ctx.onFrame, the frame clock, ctx.random() and ctx.state; timers, Date.now() and Math.random() do not."
11
+ ],
12
+ module: {
13
+ draw: "draw(ctx, frame): synchronous Canvas 2D drawing in item-local units.",
14
+ animated: "true redraws every frame; otherwise draw runs when its inputs change or after invalidate().",
15
+ parameters: "Declares params as { name: { type: number | boolean | string | color, label?, default?, min?, max?, step? } }.",
16
+ default: "Setup function (ctx) for behavior; may return a cleanup function."
17
+ },
18
+ frame: {
19
+ t: "Clock time in milliseconds.",
20
+ dt: "Milliseconds since the previous frame.",
21
+ width: "Item width in board units.",
22
+ height: "Item height in board units.",
23
+ seed: "script.seed, or the item id.",
24
+ params: "script.params merged over parameter defaults.",
25
+ state: "ctx.state."
26
+ },
27
+ context: {
28
+ self: "The owner: id, base (its authored item) and present(patch | null).",
29
+ params: "script.params merged over parameter defaults.",
30
+ targets: "script.targets: names mapped to item ids.",
31
+ state: "Mutable state kept across frames and restored in exports.",
32
+ frame: "The latest frame.",
33
+ view: "Camera, width, height and safeRect in screen pixels; null until a viewchange.",
34
+ random: "random(): a seeded number in [0, 1).",
35
+ on: "on(type, handler): input and host events; returns an unsubscribe function.",
36
+ onFrame: "onFrame(handler): a 60 Hz fixed step; returns an unsubscribe function.",
37
+ onDispose: "onDispose(handler): cleanup when the instance stops.",
38
+ invalidate: "invalidate(): redraw a non-animated draw().",
39
+ get: "get(id): an item in scope, as authored.",
40
+ present: "present(id, patch | null): temporarily override an item in scope; never saved.",
41
+ scene: "scene(items, options?): replace this instance's temporary Board items; never saved.",
42
+ hitRegions: "hitRegions(regions): replace the input declarations.",
43
+ emit: "emit(id, type, data?): send a custom event to another scripted item in scope.",
44
+ commit: "commit(patch): save a Board patch through history and permissions; it may edit items in scope or add children to a scoped frame.",
45
+ capabilities: "has(name) and call(name, input?) for adapters the host provides."
46
+ },
47
+ scope: "The owner, a Frame owner's descendants, and script.targets.",
48
+ hitRegions: {
49
+ forms: [
50
+ "{ target: \"self\" }: the owner.",
51
+ "{ item: id }: a scene item.",
52
+ "{ x, y, width, height }: a rectangle in owner coordinates."
53
+ ],
54
+ options: "label (also a keyboard focus target) and cursor.",
55
+ rule: "Only declared regions receive input; everything else passes through to the Board. Event target is the region's key."
56
+ },
57
+ sceneOptions: {
58
+ space: "world (default) follows the owner's transform; screen keeps screen-pixel size and is left out of exports.",
59
+ anchor: "{ item, point }: pin a screen scene to an item, point in 0–1 box coordinates."
60
+ },
61
+ events: {
62
+ input: "pointerenter, pointerleave, pointerdown, pointermove, pointerup, pointercancel, click, focus, blur, keydown, keyup. Pointer events carry point in owner coordinates; key events carry key.",
63
+ host: {
64
+ selectionchange: "data.ids: selected items in scope.",
65
+ transformend: "data.ids, data.operation (move | resize | rotate | arrow), data.cancelled.",
66
+ viewchange: "data: the view; also stored in ctx.view."
67
+ }
68
+ },
69
+ view: {
70
+ camera: "x, y and zoom.",
71
+ width: "Viewport width in screen pixels.",
72
+ height: "Viewport height in screen pixels.",
73
+ safeRect: "The viewport area not covered by editor chrome."
74
+ }
75
+ };
76
+ //#endregion
77
+ export { BOARD_SCRIPT_API };
@@ -7,6 +7,6 @@ declare function drawAudioWaveform(graphics: Graphics, seed: string, rect: {
7
7
  y: number;
8
8
  width: number;
9
9
  height: number;
10
- }, color: number, alpha?: number): void;
10
+ }, color: number, alpha?: number, square?: boolean): void;
11
11
  //#endregion
12
12
  export { audioWaveformBars, drawAudioWaveform };
@@ -17,7 +17,7 @@ function audioWaveformBars(seed, count) {
17
17
  }
18
18
  return bars;
19
19
  }
20
- function drawAudioWaveform(graphics, seed, rect, color, alpha = .72) {
20
+ function drawAudioWaveform(graphics, seed, rect, color, alpha = .72, square = false) {
21
21
  const count = Math.max(8, Math.min(DEFAULT_BARS, Math.floor(rect.width / 4)));
22
22
  const step = rect.width / count;
23
23
  const barWidth = Math.max(1.5, step - BAR_GAP);
@@ -26,11 +26,14 @@ function drawAudioWaveform(graphics, seed, rect, color, alpha = .72) {
26
26
  const bars = audioWaveformBars(seed, count);
27
27
  for (let index = 0; index < count; index += 1) {
28
28
  const height = Math.max(2, (bars[index] ?? .4) * maxHeight);
29
- graphics.roundRect(rect.x + index * step, centerY - height / 2, barWidth, height, barWidth / 2).fill({
30
- color,
31
- alpha
32
- });
29
+ const x = rect.x + index * step;
30
+ if (square) graphics.rect(x, centerY - height / 2, barWidth, height);
31
+ else graphics.roundRect(x, centerY - height / 2, barWidth, height, barWidth / 2);
33
32
  }
33
+ graphics.fill({
34
+ color,
35
+ alpha
36
+ });
34
37
  }
35
38
  //#endregion
36
39
  export { audioWaveformBars, drawAudioWaveform };
@@ -0,0 +1,24 @@
1
+ import { BoardRenderContext } from "./renderers/board-renderer-registry.js";
2
+ import { Container, Graphics, Text } from "pixi.js";
3
+ //#region src/board/render/card-tag.d.ts
4
+ type CardGlyph = "image" | "video" | "audio" | "file" | "task";
5
+ declare const CARD_TAG_SIZE = 11;
6
+ declare function formatBoardDuration(ms: number): string;
7
+ declare function drawCardGlyph(graphics: Graphics, glyph: CardGlyph, color: number, pixel: boolean): void;
8
+ type CardTag = {
9
+ root: Container;
10
+ icon: Graphics;
11
+ text: Text | null;
12
+ sig: string;
13
+ resolution: number;
14
+ width: number;
15
+ };
16
+ declare function createCardTag(): CardTag;
17
+ declare function zoomCardTag(tag: CardTag, zoom: number): void;
18
+ declare function syncCardTag(tag: CardTag, input: {
19
+ glyph: CardGlyph;
20
+ text: string;
21
+ width: number;
22
+ }, context: BoardRenderContext): void;
23
+ //#endregion
24
+ export { CARD_TAG_SIZE, CardGlyph, CardTag, createCardTag, drawCardGlyph, formatBoardDuration, syncCardTag, zoomCardTag };