@scrawl-board/board 0.1.0-beta.0 → 0.1.0-beta.2

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/dist/index.d.ts CHANGED
@@ -14,6 +14,12 @@ declare function strokeId(value: string): StrokeId;
14
14
 
15
15
  /** Wire grammar: `asset:<namespace>:<opaque-id>`. Interpreted only by the Host. */
16
16
  type AssetRef = string;
17
+ declare const ASSET_REF_PATTERN: RegExp;
18
+ /** Hard ceiling on a reference's own wire length — independent of any resource limit below. */
19
+ declare const ASSET_REF_MAX_BYTES = 512;
20
+ declare function isAssetRef(value: unknown): value is AssetRef;
21
+ /** Throws on malformed input; use `isAssetRef` where a boolean is wanted instead. */
22
+ declare function assetRef(value: string): AssetRef;
17
23
  type AssetKind = "image";
18
24
  type AssetPurpose = "render" | "thumbnail" | "export";
19
25
  interface AssetResolveRequest {
@@ -55,6 +61,12 @@ interface AssetIngestor {
55
61
  ingest(request: AssetIngestRequest): Promise<AssetIngestResult>;
56
62
  }
57
63
  type AssetResolutionErrorCode = "resolver-unavailable" | "not-found" | "forbidden" | "offline" | "unsupported-type" | "too-large" | "invalid-content" | "decode-failed" | "budget-exceeded" | "aborted" | "unknown";
64
+ declare class AssetResolutionError extends Error {
65
+ readonly code: AssetResolutionErrorCode;
66
+ readonly retryable: boolean;
67
+ readonly ref?: AssetRef | undefined;
68
+ constructor(code: AssetResolutionErrorCode, retryable: boolean, message: string, ref?: AssetRef | undefined);
69
+ }
58
70
  /** Runtime event for a resolution/ingestion failure — never carries credentials or a fetchable location. */
59
71
  interface AssetDiagnostic {
60
72
  code: AssetResolutionErrorCode;
@@ -63,6 +75,18 @@ interface AssetDiagnostic {
63
75
  objectKind: "image" | "custom";
64
76
  retryable: boolean;
65
77
  }
78
+ declare const ASSET_MAX_ENCODED_BYTES: number;
79
+ declare const ASSET_MAX_DIMENSION_PX = 8192;
80
+ declare const ASSET_MAX_DECODED_MEGAPIXELS = 40;
81
+ declare const ASSET_MAX_CONCURRENT_RESOLUTIONS = 6;
82
+ declare const ASSET_CACHE_BYTES_DEFAULT: number;
83
+ declare const ASSET_CACHE_BYTES_MIN: number;
84
+ declare const ASSET_CACHE_BYTES_MAX: number;
85
+ declare const ASSET_EXPORT_MAX_ENCODED_BYTES: number;
86
+ declare const ASSET_EXPORT_MAX_DECODED_MEGAPIXELS = 100;
87
+ declare const SUPPORTED_ASSET_MEDIA_TYPES: readonly ["image/png", "image/jpeg", "image/webp"];
88
+ type SupportedAssetMediaType = (typeof SUPPORTED_ASSET_MEDIA_TYPES)[number];
89
+ declare function clampAssetCacheBytes(value: number | undefined): number;
66
90
 
67
91
  type Mat2x3 = [number, number, number, number, number, number];
68
92
  declare const IDENTITY: Mat2x3;
@@ -121,6 +145,7 @@ interface CustomBoardObject {
121
145
  };
122
146
  props: JsonValue;
123
147
  }
148
+ declare function cloneCustomObject(object: CustomBoardObject): CustomBoardObject;
124
149
  /**
125
150
  * The read-only view handed to `describe`. Deep-readonly by construction
126
151
  * (not derived via a shallow `Readonly<>`) because `describe` must treat its
@@ -158,7 +183,7 @@ interface CustomObjectDefinition<Props extends JsonValue = JsonValue> {
158
183
  parse(input: unknown, schemaVersion: number): Props;
159
184
  /** One pure, synchronous step per consecutive schema version. */
160
185
  migrate?: Readonly<Record<number, (oldProps: JsonValue) => JsonValue>>;
161
- describe(object: ReadonlyCustomObject<Props>, context: ObjectDescribeContext): BoardScene$1;
186
+ describe(object: ReadonlyCustomObject<Props>, context: ObjectDescribeContext): BoardScene;
162
187
  }
163
188
  interface SceneNodeBase {
164
189
  key: string;
@@ -190,9 +215,9 @@ interface SceneText extends SceneNodeBase {
190
215
  }
191
216
  interface SceneGroup extends SceneNodeBase {
192
217
  kind: "group";
193
- children: readonly BoardScene$1[];
218
+ children: readonly BoardScene[];
194
219
  }
195
- interface ScenePath$1 extends SceneNodeBase {
220
+ interface ScenePath extends SceneNodeBase {
196
221
  kind: "path";
197
222
  /** SVG-style path data, board-local coordinates. */
198
223
  d: string;
@@ -225,7 +250,7 @@ interface SceneEllipse extends SceneNodeBase {
225
250
  stroke?: string;
226
251
  strokeWidth?: number;
227
252
  }
228
- type BoardScene$1 = SceneGroup | ScenePath$1 | SceneText | SceneImage | SceneRect | SceneEllipse;
253
+ type BoardScene = SceneGroup | ScenePath | SceneText | SceneImage | SceneRect | SceneEllipse;
229
254
  type ToolCursor = "default" | "crosshair" | "pointer" | "grab" | "grabbing" | "text";
230
255
  type ToolCancelReason = "escape-key" | "tool-switched" | "pointer-lost" | "error";
231
256
  interface InputModifiers {
@@ -321,7 +346,7 @@ interface ToolCapabilities {
321
346
  };
322
347
  /** Session-only geometry — never enters Document/history/persistence/collaboration. */
323
348
  preview: {
324
- set(scene: BoardScene$1): void;
349
+ set(scene: BoardScene): void;
325
350
  clear(): void;
326
351
  };
327
352
  /** Constructs, validates, and commits one atomic command; controller derives Ops. */
@@ -550,7 +575,6 @@ declare function measureTable(table: TableBlock): {
550
575
  width: number;
551
576
  height: number;
552
577
  };
553
- declare const BOARD_COLOR = "#FFFFFF";
554
578
  declare const FOG_COLOR = "#FFFFFF";
555
579
  /**
556
580
  * An imported image block on the board plane.
@@ -1109,6 +1133,11 @@ interface ExtensionRegistry {
1109
1133
  * isn't in it), Custom objects still export via the standard fallback
1110
1134
  * placeholder (`fallback.bounds`/`label`), never silently dropped.
1111
1135
  *
1136
+ * `backgroundColor` should be the Host's actual resolved `boardTheme.surface`
1137
+ * so an export matches what was on screen; defaults to the theme system's
1138
+ * own light-preset default when the caller doesn't have one on hand. The
1139
+ * board's reference grid, if any, is a screen-only aid and never exported.
1140
+ *
1112
1141
  * `resolvedAssets` (ticket #23) maps an Asset reference to an already-
1113
1142
  * resolved `data:` URI — see `assetExport.ts`'s `exportDocumentSVGWithAssets`,
1114
1143
  * which is the only intended caller that ever passes one. Without it, every
@@ -1116,27 +1145,11 @@ interface ExtensionRegistry {
1116
1145
  * placeholder instead of guessing at a URL; a legacy `src`-backed image is
1117
1146
  * unaffected either way.
1118
1147
  */
1119
- declare function documentToSVG(doc: SerializedDocument, now?: number, registry?: ExtensionRegistry, resolvedAssets?: ReadonlyMap<AssetRef, string>): string;
1148
+ declare function documentToSVG(doc: SerializedDocument, now?: number, registry?: ExtensionRegistry, backgroundColor?: string, resolvedAssets?: ReadonlyMap<AssetRef, string>): string;
1120
1149
 
1121
1150
  declare const SDK_PACKAGE_NAME = "@scrawl-board/board";
1122
1151
  declare const SDK_DEVELOPMENT_VERSION = "0.0.0-development";
1123
1152
 
1124
- type BoardBounds = {
1125
- minX: number;
1126
- minY: number;
1127
- maxX: number;
1128
- maxY: number;
1129
- };
1130
- type ScenePath = {
1131
- id: string;
1132
- color: string;
1133
- width: number;
1134
- points: readonly BoardPoint[];
1135
- };
1136
- type BoardScene = {
1137
- bounds: BoardBounds;
1138
- paths: readonly ScenePath[];
1139
- };
1140
1153
  type BoardStroke = Stroke;
1141
1154
  type SerializedBoardStroke = SerializedStroke;
1142
1155
  type SerializedBoardDocument = CurrentSerializedDocument;
@@ -1292,6 +1305,27 @@ interface BoardView {
1292
1305
  y: number;
1293
1306
  zoom: number;
1294
1307
  }
1308
+ /**
1309
+ * The rendered board surface's color, reference grid, and shape stroke
1310
+ * width — the subset of {@link ScrawlTheme} that reaches the rendering
1311
+ * engine directly (everything else is UI-chrome-only, applied as CSS). Any
1312
+ * field left unset keeps its current value.
1313
+ */
1314
+ interface BoardThemeOptions {
1315
+ /** The board/canvas background color — distinct from UI chrome panels. */
1316
+ surface?: string;
1317
+ /** `"flat"` (default): a plain, uniform board surface. `"textured"`: a subtle "melamine" micro-noise + satin sheen, like a physical whiteboard. */
1318
+ surfaceTexture?: "flat" | "textured";
1319
+ /** `"none"` (default) keeps the board a plain surface; `"line"`/`"dot"` draw a zoom-adaptive reference grid. */
1320
+ gridMode?: "none" | "line" | "dot";
1321
+ gridColor?: string;
1322
+ /** Grid spacing in board units at 100% zoom. Ignored when `gridMode` is `"none"`. */
1323
+ gridSpacing?: number;
1324
+ /** On-screen grid line/dot width in CSS pixels — stays this width at any zoom, since the grid is a reference aid, not content. */
1325
+ gridLineWidth?: number;
1326
+ /** Shape (rectangle, ellipse, arrow, ...) border width, in board units — scales with zoom like ink, since it's part of the drawn content. */
1327
+ shapeStrokeWidth?: number;
1328
+ }
1295
1329
  /**
1296
1330
  * A Host-owned comment, summarized for Board-side search and marker
1297
1331
  * rendering. Comments are not Document content — they carry no undo
@@ -1483,22 +1517,26 @@ interface CreateBoardControllerOptions {
1483
1517
  * Trusted Custom tool/object registrations (ticket #22, design:
1484
1518
  * docs/research/extension-contracts.md). Validated atomically at
1485
1519
  * construction; registration failure throws before any controller is
1486
- * returned. Not yet re-exported from a public package entry point —
1487
- * internal-only until the reference Extension proves the seam.
1520
+ * returned.
1488
1521
  */
1489
1522
  extensions?: readonly ScrawlExtension[];
1490
1523
  /**
1491
1524
  * Optional Host-managed Asset capabilities (ticket #23, design:
1492
1525
  * docs/research/asset-resolution-resource-policy.md). Without a
1493
1526
  * resolver, referenced Assets preserve their Document geometry and
1494
- * render an accessible placeholder. Not yet re-exported from a public
1495
- * package entry point — internal-only until the reference resolver
1496
- * proves the seam, matching how `extensions` is scoped.
1527
+ * render an accessible placeholder.
1497
1528
  */
1498
1529
  assetResolver?: AssetResolver;
1499
1530
  assetIngestor?: AssetIngestor;
1500
1531
  /** Clamped to 64–512MiB; defaults to 256MiB. */
1501
1532
  assetCacheBytes?: number;
1533
+ /**
1534
+ * The rendered board surface's color and reference grid. Defaults to the
1535
+ * light theme preset's values; `<Scrawl>` keeps this current across theme
1536
+ * changes via `boardTheme.set` below — a headless/browser-tier Host that
1537
+ * doesn't use the React theme system can set this directly instead.
1538
+ */
1539
+ boardTheme?: BoardThemeOptions;
1502
1540
  }
1503
1541
  interface BoardController {
1504
1542
  readonly document: ReadonlyBoardDocument;
@@ -1524,6 +1562,10 @@ interface BoardController {
1524
1562
  undo(): void;
1525
1563
  redo(): void;
1526
1564
  };
1565
+ readonly boardTheme: {
1566
+ /** Live update of the board surface color/grid/shape-stroke-width — the controller's identity stays fixed across theme changes. */
1567
+ set(theme: BoardThemeOptions): void;
1568
+ };
1527
1569
  readonly view: {
1528
1570
  fit(): void;
1529
1571
  zoomTo(value: number): void;
@@ -1626,30 +1668,76 @@ declare function createLocalBoard(options: LocalBoardOptions): LocalBoard;
1626
1668
 
1627
1669
  type ScrawlThemePreset = "light" | "dark";
1628
1670
  type ScrawlDensity = "comfortable" | "compact";
1671
+ type ScrawlGridMode = "none" | "line" | "dot";
1672
+ type ScrawlSurfaceTexture = "flat" | "textured";
1673
+ /**
1674
+ * Every field is optional — anything you don't set falls back to the
1675
+ * chosen `preset` ("light" or "dark", see {@link resolveScrawlTheme}).
1676
+ * Overrides are semantic, board-local runtime configuration: they never
1677
+ * get written into the Document or into exports, so switching themes is
1678
+ * always non-destructive.
1679
+ */
1629
1680
  interface ScrawlTheme {
1681
+ /** UI chrome background — toolbar/panel base surface. Distinct from `boardSurface` (the canvas itself). */
1630
1682
  surface?: string;
1683
+ /** UI chrome background, one step up from `surface` — popovers, dropdowns, elevated panels. */
1631
1684
  surfaceRaised?: string;
1685
+ /** UI chrome background, one step down from `surface` — subtle fills, hover states. */
1632
1686
  surfaceMuted?: string;
1687
+ /** Primary UI text color. Checked for contrast against `surface`. */
1633
1688
  text?: string;
1689
+ /** Secondary/de-emphasized UI text color. Checked for contrast against `surface`. */
1634
1690
  textMuted?: string;
1691
+ /** Borders and dividers between UI chrome elements. */
1635
1692
  edge?: string;
1693
+ /** Focus ring color. Checked for contrast against `surface`. */
1636
1694
  focus?: string;
1695
+ /** Selection highlight color (e.g. selected list items, not board object selection). */
1637
1696
  selection?: string;
1697
+ /** Destructive/error state color (delete confirmations, error text). */
1638
1698
  danger?: string;
1699
+ /** Warning state color. */
1639
1700
  warning?: string;
1701
+ /** Success/confirmation state color. */
1640
1702
  success?: string;
1703
+ /** Font stack for UI chrome (toolbar labels, menus, dialogs). */
1641
1704
  uiFontFamily?: string;
1705
+ /** Font stack for board content and data (e.g. table cell text). */
1642
1706
  dataFontFamily?: string;
1707
+ /** Base UI font size in px. Range: 12–24. */
1643
1708
  baseFontSize?: number;
1709
+ /** Regular UI font weight. Range: 300–900. */
1644
1710
  regularWeight?: number;
1711
+ /** Emphasized UI font weight (headings, active states). Range: 300–900. */
1645
1712
  strongWeight?: number;
1713
+ /** Corner radius for small controls (buttons, inputs) in px. Range: 0–32. */
1646
1714
  controlRadius?: number;
1715
+ /** Corner radius for panels/dialogs in px. Range: 0–32. */
1647
1716
  panelRadius?: number;
1717
+ /** CSS `box-shadow` value for subtle elevation (e.g. toolbar). */
1648
1718
  elevationLow?: string;
1719
+ /** CSS `box-shadow` value for prominent elevation (e.g. modals). */
1649
1720
  elevationHigh?: string;
1721
+ /** UI transition duration in ms. Range: 0–500. */
1650
1722
  motionDuration?: number;
1723
+ /** CSS easing function for UI transitions. */
1651
1724
  motionEasing?: string;
1725
+ /** UI chrome spacing/sizing scale. */
1652
1726
  density?: ScrawlDensity;
1727
+ /** The rendered board/canvas surface color — distinct from `surface` (UI chrome panels). */
1728
+ boardSurface?: string;
1729
+ /** `"flat"` (default): a plain, uniform board surface. `"textured"`: a subtle "melamine" micro-noise + satin sheen, like a physical whiteboard. */
1730
+ boardSurfaceTexture?: ScrawlSurfaceTexture;
1731
+ /** `"none"` (default) keeps the board a plain surface; `"line"`/`"dot"` draw a zoom-adaptive reference grid. */
1732
+ gridMode?: ScrawlGridMode;
1733
+ /** Grid line/dot color. Ignored when `gridMode` is `"none"`. */
1734
+ gridColor?: string;
1735
+ /** Grid spacing in board units at 100% zoom. Ignored when `gridMode` is `"none"`. */
1736
+ gridSpacing?: number;
1737
+ /** On-screen grid line/dot width in CSS pixels. Range: 0.5–8. A reference aid, so unlike shape/ink strokes it stays this width at any zoom. */
1738
+ gridLineWidth?: number;
1739
+ /** Shape (rectangle, ellipse, arrow, ...) border width, in board units. Range: 0.01–5. Scales with zoom like ink, since it's part of the drawn content. */
1740
+ shapeStrokeWidth?: number;
1653
1741
  }
1654
1742
  type ResolvedScrawlTheme = Required<ScrawlTheme>;
1655
1743
  interface ScrawlThemeDiagnostic {
@@ -1793,5 +1881,5 @@ type ScrawlBoardProps = {
1793
1881
  };
1794
1882
  declare function ScrawlBoard({ documentId, initialDocument, onReady, className, style }: ScrawlBoardProps): react.JSX.Element;
1795
1883
 
1796
- export { AddImageCommand, AddNoteCommand, AddStrokesCommand, AddTableCommand, AddTextCommand, AddTimerCommand, BEACON_INSET, BOARD_COLOR, BoardDocument, CURRENT_DOCUMENT_SCHEMA_VERSION, ClusterStore, DefaultBoardChrome, DeleteImageCommand, DeleteNoteCommand, DeleteStrokesCommand, DeleteTableCommand, DeleteTextCommand, DeleteTimerCommand, DocumentRecoveryError, END_TAPER, ERASE_THRESHOLD, EraseCommand, FOG_COLOR, HIGHLIGHT_COLORS, History, IDENTITY, INK_COLORS, InlineEditors, LockItemsCommand, MIN_WIDTH_FACTOR, MultiplayerCursors, NOTE_COLORS, NOTE_DEFAULT_SIZE, NOTE_DEFAULT_Z, NOTE_MAX_Z, NOTE_MIN_Z, NOTE_PEEL_STEP, SDK_DEVELOPMENT_VERSION, SDK_PACKAGE_NAME, STAMPS, STAMP_SIZE, Scrawl, ScrawlBoard, ScrawlCanvas, ScrawlDefaultUI, ScrawlPortal, ScrawlProvider, SpatialIndex, StyleShelf, TABLE_DEFAULT_CELL_HEIGHT, TABLE_DEFAULT_CELL_WIDTH, TABLE_DEFAULT_FONT_SIZE, TEXT_DEFAULT_SIZE, TIMER_DEFAULT_DURATION_MS, TIMER_DEFAULT_SIZE, TIMER_PRESETS_MS, TransformCommand, UpdateImageCommand, UpdateNoteCommand, UpdateTableCommand, UpdateTextCommand, UpdateTimerCommand, apply, applyItemLock, avgScale, canUnlockItem, changeToOps, cloneImage, cloneNote, cloneStroke, cloneTable, cloneText, cloneTimer, createBoardController, createLocalBoard, documentId, documentToSVG, formatTimer, invert, isIdentity, isStampKind, loadDocumentBytes, measureTable, measureTextBlock, migrateDocument, mul, pauseTimer, placePresenceBeacon, resolveScrawlTheme, ribbonEdges, rotationAbout, scalingAbout, scrawlThemePresets, searchBoard, serializeDocument, serializeLock, serializeStroke, setTimerDuration, stampDataUrl, startTimer, strokeId, timerExpired, timerRemaining, toggleTimer, translation, useScrawlController, useScrawlSnapshot, useScrawlTheme, validateScrawlTheme };
1797
- export type { ApplyOpsResult, BBox, BoardBounds, BoardController, BoardControllerError, BoardEventMap, BoardObject, BoardObjectInput, BoardObjectPatch, BoardPoint, BoardScene, BoardSlotProps, BoardSnapshot, BoardStroke, BoardStyle, BoardView, BuiltInTool, ClusterIdFactory, CollaborationAdapter, CollaborationReceiver, CollaborationSession, CollaborationSnapshot, CollaboratorIdentity, Command, CommandKind, CommentMarker, ControllerOp, CreateBoardControllerOptions, CurrentSerializedDocument, CurrentSerializedStroke, DeepReadonly, DefaultBoardChromeProps, DefaultUIRegion, DefaultUISlot, DefaultUISlots, DialogSlotProps, DocumentChange, DocumentContext, DocumentId, DocumentLoadResult, DocumentRecoveryCode, ImageBlock, InlineEditorsProps, KitchenTimer, LoadResult, LocalBoard, LocalBoardOptions, LocalBoardSnapshot, LockHolder, LockTarget, Lockable, Mat2x3, MultiplayerCursorsProps, NoteVote, Op, OpCollection, PersistenceAdapter, PersistenceDiagnostic, PersistenceSnapshot, PresenceCursor, PresencePlacement, PresenceUser, PresenceView, ReadonlyBoardDocument, ReadonlyDocumentChange, RibbonEdgePoint, ScenePath, ScrawlBoardProps, ScrawlCanvasProps, ScrawlDefaultUIProps, ScrawlProps, ScrawlProviderProps, ScrawlResolvedTheme, ScrawlTheme, ScrawlThemeDiagnostic, ScrawlThemePreset, ScreenPoint, ScreenRect, SearchHit, SearchHitKind, SearchableBoard, SearchableComment, SerializedBoardDocument, SerializedBoardStroke, SerializedPoint, SerializedStroke, StampKind, StickyNote, Stroke, StrokeId, StrokePoint, StrokeTool, StyleShelfProps, TableBlock, TextBlock, ViewportInset };
1884
+ export { ASSET_CACHE_BYTES_DEFAULT, ASSET_CACHE_BYTES_MAX, ASSET_CACHE_BYTES_MIN, ASSET_EXPORT_MAX_DECODED_MEGAPIXELS, ASSET_EXPORT_MAX_ENCODED_BYTES, ASSET_MAX_CONCURRENT_RESOLUTIONS, ASSET_MAX_DECODED_MEGAPIXELS, ASSET_MAX_DIMENSION_PX, ASSET_MAX_ENCODED_BYTES, ASSET_REF_MAX_BYTES, ASSET_REF_PATTERN, AddImageCommand, AddNoteCommand, AddStrokesCommand, AddTableCommand, AddTextCommand, AddTimerCommand, AssetResolutionError, BEACON_INSET, BoardDocument, CURRENT_DOCUMENT_SCHEMA_VERSION, ClusterStore, DefaultBoardChrome, DeleteImageCommand, DeleteNoteCommand, DeleteStrokesCommand, DeleteTableCommand, DeleteTextCommand, DeleteTimerCommand, DocumentRecoveryError, END_TAPER, ERASE_THRESHOLD, EraseCommand, FOG_COLOR, HIGHLIGHT_COLORS, History, IDENTITY, INK_COLORS, InlineEditors, LockItemsCommand, MIN_WIDTH_FACTOR, MultiplayerCursors, NOTE_COLORS, NOTE_DEFAULT_SIZE, NOTE_DEFAULT_Z, NOTE_MAX_Z, NOTE_MIN_Z, NOTE_PEEL_STEP, SDK_DEVELOPMENT_VERSION, SDK_PACKAGE_NAME, STAMPS, STAMP_SIZE, SUPPORTED_ASSET_MEDIA_TYPES, Scrawl, ScrawlBoard, ScrawlCanvas, ScrawlDefaultUI, ScrawlPortal, ScrawlProvider, SpatialIndex, StyleShelf, TABLE_DEFAULT_CELL_HEIGHT, TABLE_DEFAULT_CELL_WIDTH, TABLE_DEFAULT_FONT_SIZE, TEXT_DEFAULT_SIZE, TIMER_DEFAULT_DURATION_MS, TIMER_DEFAULT_SIZE, TIMER_PRESETS_MS, TransformCommand, UpdateImageCommand, UpdateNoteCommand, UpdateTableCommand, UpdateTextCommand, UpdateTimerCommand, apply, applyItemLock, assetRef, avgScale, canUnlockItem, changeToOps, clampAssetCacheBytes, cloneCustomObject, cloneImage, cloneNote, cloneStroke, cloneTable, cloneText, cloneTimer, createBoardController, createLocalBoard, documentId, documentToSVG, formatTimer, invert, isAssetRef, isIdentity, isStampKind, loadDocumentBytes, measureTable, measureTextBlock, migrateDocument, mul, pauseTimer, placePresenceBeacon, resolveScrawlTheme, ribbonEdges, rotationAbout, scalingAbout, scrawlThemePresets, searchBoard, serializeDocument, serializeLock, serializeStroke, setTimerDuration, stampDataUrl, startTimer, strokeId, timerExpired, timerRemaining, toggleTimer, translation, useScrawlController, useScrawlSnapshot, useScrawlTheme, validateScrawlTheme };
1885
+ export type { ApplyOpsResult, AssetDiagnostic, AssetIngestRequest, AssetIngestResult, AssetIngestor, AssetKind, AssetPurpose, AssetRef, AssetResolutionErrorCode, AssetResolveRequest, AssetResolveResult, AssetResolver, BBox, BoardController, BoardControllerError, BoardEventMap, BoardKeyInput, BoardObject, BoardObjectInput, BoardObjectPatch, BoardPoint, BoardPointerInput, BoardScene, BoardSlotProps, BoardSnapshot, BoardStroke, BoardStyle, BoardThemeOptions, BoardView, BuiltInTool, ClusterIdFactory, CollaborationAdapter, CollaborationReceiver, CollaborationSession, CollaborationSnapshot, CollaboratorIdentity, Command, CommandKind, CommentMarker, ControllerOp, CreateBoardControllerOptions, CurrentSerializedDocument, CurrentSerializedStroke, CustomBoardObject, CustomObjectAddInput, CustomObjectDefinition, CustomTool, CustomToolDefinition, DeepReadonly, DefaultBoardChromeProps, DefaultUIRegion, DefaultUISlot, DefaultUISlots, DialogSlotProps, DocumentChange, DocumentContext, DocumentId, DocumentLoadResult, DocumentRecoveryCode, ExtensionCommand, ExtensionDiagnostic, ExtensionHitResult, ExtensionId, ExtensionRequirement, ImageBlock, InlineEditorsProps, InputModifiers, JsonObject, JsonValue, KitchenTimer, LoadResult, LocalBoard, LocalBoardOptions, LocalBoardSnapshot, LockHolder, LockTarget, Lockable, Mat2x3, MultiplayerCursorsProps, NoteVote, ObjectDescribeContext, ObjectIntent, ObjectType, Op, OpCollection, PersistenceAdapter, PersistenceDiagnostic, PersistenceSnapshot, PresenceCursor, PresencePlacement, PresenceUser, PresenceView, QueryableBoardObject, ReadonlyBoardDocument, ReadonlyCustomObject, ReadonlyDocumentChange, RibbonEdgePoint, SceneEllipse, SceneGroup, SceneImage, ScenePath, SceneRect, SceneText, ScrawlBoardProps, ScrawlCanvasProps, ScrawlDefaultUIProps, ScrawlDensity, ScrawlExtension, ScrawlGridMode, ScrawlProps, ScrawlProviderProps, ScrawlResolvedTheme, ScrawlSurfaceTexture, ScrawlTheme, ScrawlThemeDiagnostic, ScrawlThemePreset, ScreenPoint, ScreenRect, SearchHit, SearchHitKind, SearchableBoard, SearchableComment, SerializedBoardDocument, SerializedBoardStroke, SerializedPoint, SerializedStroke, StampKind, StickyNote, Stroke, StrokeId, StrokePoint, StrokeTool, StyleShelfProps, SupportedAssetMediaType, TableBlock, TextBlock, ToolCancelReason, ToolCapabilities, ToolCursor, ToolId, ViewportInset };