@imgly/codesign-mcp 0.1.2 → 0.1.5

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.
@@ -103,7 +103,7 @@ export declare type AnimationEntry = {
103
103
  export declare type AnimationGrowDirection = (typeof AnimationGrowDirectionValues)[number];
104
104
 
105
105
  /** @public */
106
- export declare const AnimationGrowDirectionValues: readonly ["Horizontal", "Vertical", "TopLeft", "TopRight", "BottomLeft", "BottomRight", "All"];
106
+ export declare const AnimationGrowDirectionValues: readonly ["Horizontal", "Vertical", "All", "TopLeft", "TopRight", "BottomLeft", "BottomRight"];
107
107
 
108
108
  /** @public */
109
109
  export declare type AnimationJumpLoopDirection = (typeof AnimationJumpLoopDirectionValues)[number];
@@ -136,12 +136,6 @@ export declare type AnimationOptions = {
136
136
  out?: AnimationEntry;
137
137
  };
138
138
 
139
- /** @public */
140
- export declare type AnimationScaleLoopDirection = (typeof AnimationScaleLoopDirectionValues)[number];
141
-
142
- /** @public */
143
- export declare const AnimationScaleLoopDirectionValues: readonly ["Horizontal", "Vertical", "TopLeft", "TopRight", "BottomLeft", "BottomRight", "All"];
144
-
145
139
  /** @public */
146
140
  export declare type AnimationSpinDirection = (typeof AnimationSpinDirectionValues)[number];
147
141
 
@@ -1028,6 +1022,8 @@ export declare interface AssetPayload {
1028
1022
  typeface?: Typeface;
1029
1023
  transformPreset?: AssetTransformPreset;
1030
1024
  properties?: AssetProperty[];
1025
+ /** A declarative style preset the engine applies to text/caption blocks. */
1026
+ stylePreset?: AssetStylePreset;
1031
1027
  }
1032
1028
 
1033
1029
  /**
@@ -1317,6 +1313,166 @@ export declare interface AssetStringProperty {
1317
1313
  defaultValue: string;
1318
1314
  }
1319
1315
 
1316
+ /**
1317
+ * A declarative style preset the engine applies to text and caption blocks. The engine parses and
1318
+ * applies it identically on every platform. Lives in {@link AssetPayload.stylePreset}.
1319
+ *
1320
+ * Most of the look is in {@link AssetStylePreset.properties}; the other fields cover the font,
1321
+ * size-relative scaling and animations.
1322
+ * @public
1323
+ */
1324
+ export declare interface AssetStylePreset {
1325
+ /**
1326
+ * The block type this preset is for. Used as the type to create when the preset is applied with no
1327
+ * target block, and as the apply filter (it only restyles a block of this type). Omitted applies to any
1328
+ * block. Style presets target text and caption blocks; the value is the longhand id, which the engine
1329
+ * matches against the block's `getType()`.
1330
+ */
1331
+ blockType?: '//ly.img.ubq/text' | '//ly.img.ubq/caption';
1332
+ /**
1333
+ * How the preset combines with the block's current look. `'replace'` (the default) also clears the
1334
+ * decorations and animations the preset omits, so switching presets never stacks; `'merge'` layers
1335
+ * the preset on top, keeping everything it does not set. Either way the block's text content is never
1336
+ * touched, and its size only changes when the preset asks for it (`fontSize.resizeExistingOnApply`,
1337
+ * or a `text/path` baseline adopting its bounding box).
1338
+ */
1339
+ mode?: 'replace' | 'merge';
1340
+ /**
1341
+ * Font to apply. The engine resolves `family` against the registered typefaces and matches
1342
+ * `weight`/`style`. Ignored when the family is empty or not registered.
1343
+ */
1344
+ typeface?: {
1345
+ family: string;
1346
+ weight?: FontWeight;
1347
+ style?: FontStyle;
1348
+ };
1349
+ /**
1350
+ * Scene-relative font size. `scale` is a unitless multiplier on the scene's base font size (1 = the
1351
+ * base size), sizing a block created from the preset. With `resizeExistingOnApply: true` the same size
1352
+ * also resizes an existing block on apply. For an absolute size, set `properties['text/fontSize']`
1353
+ * instead (it takes precedence).
1354
+ */
1355
+ fontSize?: {
1356
+ scale: number;
1357
+ resizeExistingOnApply?: boolean;
1358
+ };
1359
+ /**
1360
+ * Lengths that scale with the block's font size. Each entry sets its `property` to `ratio × fontSize`
1361
+ * — e.g. `{ property: 'stroke/width', ratio: 0.012 }` makes the stroke width `0.012 × fontSize`. Keeps
1362
+ * a preset's stroke width, drop-shadow offset/blur, … proportional at any size.
1363
+ */
1364
+ scaleWithFontSize?: Array<{
1365
+ property: AssetStylePresetScalableProperty;
1366
+ ratio: number;
1367
+ }>;
1368
+ /**
1369
+ * The bulk of the look: typography plus the `fill/*`, `stroke/*`, `dropShadow/*` and
1370
+ * `backgroundColor/*` decorations with their `…/enabled` toggles. Known paths are value-checked and
1371
+ * autocomplete. See {@link AssetStylePresetProperties}.
1372
+ */
1373
+ properties?: AssetStylePresetProperties;
1374
+ /** Entrance animation. */
1375
+ inAnimation?: AssetStylePresetAnimation;
1376
+ /** Exit animation. */
1377
+ outAnimation?: AssetStylePresetAnimation;
1378
+ /** Looping animation. */
1379
+ loopAnimation?: AssetStylePresetAnimation;
1380
+ }
1381
+
1382
+ /**
1383
+ * An animation slot of an {@link AssetStylePreset} (`inAnimation`, `outAnimation` or `loopAnimation`).
1384
+ * @public
1385
+ */
1386
+ export declare interface AssetStylePresetAnimation {
1387
+ /** The animation block type to apply, e.g. `'//ly.img.ubq/animation/slide'`. */
1388
+ type: AnimationTypeLonghand;
1389
+ /** Configures the animation as a map of its property paths to values. */
1390
+ properties?: AssetStylePresetAnimationProperties;
1391
+ }
1392
+
1393
+ /**
1394
+ * The parameters of an {@link AssetStylePresetAnimation}: a map of the animation's property paths to
1395
+ * values. The animation's `animation/*` properties (e.g. `animation/slide/fade`,
1396
+ * `animation/grow/scaleFactor`) are value-checked and autocomplete, as are the animation controls
1397
+ * (`playback/duration`, `animationEasing`, `textWritingStyle`, `textWritingOverlap`); any other
1398
+ * property path is still accepted. These are animation paths, distinct from the block-property paths
1399
+ * in {@link AssetStylePresetProperties}.
1400
+ * @public
1401
+ */
1402
+ export declare type AssetStylePresetAnimationProperties = {
1403
+ [K in Extract<BoolPropertyName, `animation/${string}`>]?: boolean;
1404
+ } & {
1405
+ [K in Extract<EnumPropertyName, `animation/${string}`>]?: string;
1406
+ } & {
1407
+ [K in Extract<FloatPropertyName, `animation/${string}`>]?: number;
1408
+ } & {
1409
+ [K in Extract<ColorPropertyName, `animation/${string}`>]?: RGBColor | RGBAColor;
1410
+ } & {
1411
+ /** Animation controls applied outside the `animation/*` properties. */
1412
+ 'playback/duration'?: number;
1413
+ animationEasing?: string;
1414
+ textWritingStyle?: string;
1415
+ textWritingOverlap?: number;
1416
+ } & {
1417
+ [path: string]: AssetStylePresetPropertyValue;
1418
+ };
1419
+
1420
+ /**
1421
+ * The look of an {@link AssetStylePreset}: a map of property paths to values. Known paths are
1422
+ * value-checked and autocomplete (e.g. `stroke/enabled` must be a boolean, `stroke/width` a number,
1423
+ * `fill/solid/color` a color); any other property path is still accepted with the broader
1424
+ * {@link AssetStylePresetPropertyValue}. Keys without a `/` are namespaced to the block (`text/` or
1425
+ * `caption/`); keys with a `/` are used verbatim.
1426
+ * @public
1427
+ */
1428
+ export declare type AssetStylePresetProperties = {
1429
+ [K in BoolPropertyName as string extends K ? never : K]?: boolean;
1430
+ } & {
1431
+ [K in IntPropertyName as string extends K ? never : K]?: number;
1432
+ } & {
1433
+ [K in FloatPropertyName as string extends K ? never : K]?: number;
1434
+ } & {
1435
+ [K in DoublePropertyName as string extends K ? never : K]?: number;
1436
+ } & {
1437
+ [K in StringPropertyName as string extends K ? never : K]?: string;
1438
+ } & {
1439
+ [K in EnumPropertyName as string extends K ? never : K]?: string;
1440
+ } & {
1441
+ [K in ColorPropertyName as string extends K ? never : K]?: RGBColor | RGBAColor;
1442
+ } & {
1443
+ /**
1444
+ * The text-on-path baseline (see `setTextOnPath`): a single-subpath SVG path string in the block's
1445
+ * local coordinate space wraps the block's text on the path and resizes the block to the path's
1446
+ * bounding box; an explicit `null` clears the path and restores normal layout. This is a virtual
1447
+ * preset property — the baseline path is not a reflected block property, so the engine routes it
1448
+ * through `setTextOnPath`, inheriting its validation. Pair it with `text/pathOffset` and
1449
+ * `text/pathFlipped` (plain reflected properties) to fully define the path state. Which curve is
1450
+ * applied is identified by the path value itself — compare `getTextOnPath` against an entry's
1451
+ * `text/path`.
1452
+ */
1453
+ 'text/path'?: string | null;
1454
+ } & {
1455
+ [path: string]: AssetStylePresetPropertyValue;
1456
+ };
1457
+
1458
+ /**
1459
+ * A value a style preset can set on a property: a boolean, number, string (including enum values) or
1460
+ * an RGB(A) color. Colors must be RGB(A) (`{ r, g, b, a? }`); CMYK and spot colors are not supported in
1461
+ * presets. Structs and source sets cannot be set from a preset. A `null` value is ignored for regular
1462
+ * properties; for the virtual `text/path` property it clears the baseline path.
1463
+ * @public
1464
+ */
1465
+ export declare type AssetStylePresetPropertyValue = boolean | number | string | RGBColor | RGBAColor | null;
1466
+
1467
+ /**
1468
+ * A length property a style preset may scale with the block's font size (see
1469
+ * {@link AssetStylePreset.scaleWithFontSize}). Restricted to the decoration lengths for which scaling is
1470
+ * meaningful — stroke width, drop-shadow offset/blur and the caption background corner radius — not
1471
+ * arbitrary numeric properties like `rotation` or `opacity`.
1472
+ * @public
1473
+ */
1474
+ export declare type AssetStylePresetScalableProperty = 'stroke/width' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'backgroundColor/cornerRadius';
1475
+
1320
1476
  /**
1321
1477
  * Transform preset payload
1322
1478
  * @public
@@ -5103,6 +5259,22 @@ export declare class BlockAPI {
5103
5259
  * @returns The unique typefaces in the range.
5104
5260
  */
5105
5261
  getTypefaces(id: DesignBlockId, from?: number, to?: number): Typeface[];
5262
+ /**
5263
+ * Gets all text runs within a range of text.
5264
+ *
5265
+ * Each run represents a contiguous span of text with uniform formatting.
5266
+ *
5267
+ * ```javascript
5268
+ * const runs = engine.block.getTextRuns(text);
5269
+ * ```
5270
+ *
5271
+ * @category Block Text
5272
+ * @param id - The text block to query.
5273
+ * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.
5274
+ * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.
5275
+ * @returns The ordered list of text runs covering the requested range.
5276
+ */
5277
+ getTextRuns(id: DesignBlockId, from?: number, to?: number): TextRunInfo[];
5106
5278
  /**
5107
5279
  * Gets the current text cursor or selection range.
5108
5280
  *
@@ -5185,6 +5357,56 @@ export declare class BlockAPI {
5185
5357
  * @returns The effective alignment ('Left', 'Right', or 'Center').
5186
5358
  */
5187
5359
  getTextEffectiveHorizontalAlignment(id: DesignBlockId): 'Left' | 'Right' | 'Center';
5360
+ /**
5361
+ * Sets the SVG path that the text baseline follows.
5362
+ * Pass `null` to restore normal straight-line text layout.
5363
+ *
5364
+ * @category Block Text
5365
+ * @param id - The text block to modify.
5366
+ * @param svgPath - An SVG path string in the block's local coordinate space, or `null` to clear.
5367
+ */
5368
+ setTextOnPath(id: DesignBlockId, svgPath: string | null): void;
5369
+ /**
5370
+ * Gets the SVG path currently used as the text baseline.
5371
+ *
5372
+ * @category Block Text
5373
+ * @param id - The text block to query.
5374
+ * @returns The SVG path string, or `null` if no path is set.
5375
+ */
5376
+ getTextOnPath(id: DesignBlockId): string | null;
5377
+ /**
5378
+ * Sets the start offset along the baseline path as a proportion of the path length.
5379
+ * Values are clamped to `[-1, 1]`; `1` and `-1` wrap back to the path start.
5380
+ *
5381
+ * @category Block Text
5382
+ * @param id - The text block to modify.
5383
+ * @param offset - The proportional offset. Positive values move the text forward along the path.
5384
+ */
5385
+ setTextOnPathOffset(id: DesignBlockId, offset: number): void;
5386
+ /**
5387
+ * Gets the start offset along the baseline path as a proportion of the path length.
5388
+ *
5389
+ * @category Block Text
5390
+ * @param id - The text block to query.
5391
+ * @returns The proportional offset in `[-1, 1]`.
5392
+ */
5393
+ getTextOnPathOffset(id: DesignBlockId): number;
5394
+ /**
5395
+ * Sets whether text is placed on the opposite side of the baseline path.
5396
+ *
5397
+ * @category Block Text
5398
+ * @param id - The text block to modify.
5399
+ * @param flipped - When `true`, text sits on the underside of the curve and reads in the reverse direction.
5400
+ */
5401
+ setTextOnPathFlipped(id: DesignBlockId, flipped: boolean): void;
5402
+ /**
5403
+ * Gets whether the text-on-path rendering is flipped.
5404
+ *
5405
+ * @category Block Text
5406
+ * @param id - The text block to query.
5407
+ * @returns `true` when text is on the underside of the curve.
5408
+ */
5409
+ getTextOnPathFlipped(id: DesignBlockId): boolean;
5188
5410
  /**
5189
5411
  * Checks if a block has fill properties.
5190
5412
  *
@@ -6189,18 +6411,25 @@ export declare class BlockAPI {
6189
6411
  /** @public */
6190
6412
  export declare type BlockEnumType = {
6191
6413
  'blend/mode': BlendMode;
6414
+ 'contentFill/horizontalAlignment': HorizontalContentFillAlignment;
6192
6415
  'contentFill/mode': ContentFillMode;
6416
+ 'contentFill/verticalAlignment': VerticalContentFillAlignment;
6193
6417
  'height/mode': HeightMode;
6194
- 'page/guides/source': PageGuidesSource;
6195
6418
  'position/x/mode': PositionXMode;
6196
6419
  'position/y/mode': PositionYMode;
6197
6420
  'scene/designUnit': SceneDesignUnit;
6421
+ 'scene/fontSizeUnit': SceneFontSizeUnit;
6198
6422
  'scene/layout': SceneLayout;
6199
6423
  'scene/mode': SceneMode;
6200
6424
  'width/mode': WidthMode;
6425
+ 'page/guides/source': PageGuidesSource;
6201
6426
  'stroke/cap': StrokeCap;
6202
6427
  'stroke/cornerGeometry': StrokeCornerGeometry;
6428
+ 'stroke/dashEndCap': StrokeDashEndCap;
6429
+ 'stroke/dashStartCap': StrokeDashStartCap;
6430
+ 'stroke/endCap': StrokeEndCap;
6203
6431
  'stroke/position': StrokePosition;
6432
+ 'stroke/startCap': StrokeStartCap;
6204
6433
  'stroke/style': StrokeStyle;
6205
6434
  'text/horizontalAlignment': TextHorizontalAlignment;
6206
6435
  'text/verticalAlignment': TextVerticalAlignment;
@@ -6219,7 +6448,6 @@ export declare type BlockEnumType = {
6219
6448
  'animation/block_swipe_text/direction': AnimationBlockSwipeTextDirection;
6220
6449
  'animation/merge_text/direction': AnimationMergeTextDirection;
6221
6450
  'animation/ken_burns/direction': AnimationKenBurnsDirection;
6222
- 'animation/scale_loop/direction': AnimationScaleLoopDirection;
6223
6451
  'fill/pixelStream/orientation': FillPixelStreamOrientation;
6224
6452
  'shape/vector_path/fillRule': ShapeVectorPathFillRule;
6225
6453
  };
@@ -6328,7 +6556,7 @@ export declare type BlurTypeShorthand = (typeof BLUR_TYPES)[number];
6328
6556
  export declare type BooleanOperation = 'Difference' | 'Intersection' | 'Union' | 'XOR';
6329
6557
 
6330
6558
  /** @public */
6331
- export declare type BoolPropertyName = 'alwaysOnBottom' | 'alwaysOnTop' | 'clipped' | 'flip/horizontal' | 'flip/vertical' | 'highlightEnabled' | 'includedInExport' | 'placeholder/enabled' | 'playback/playing' | 'playback/soloPlaybackEnabled' | 'scene/aspectRatioLock' | 'selected' | 'selectionEnabled' | 'transformLocked' | 'visible' | 'blur/enabled' | 'dropShadow/clip' | 'dropShadow/enabled' | 'fill/enabled' | 'page/guides/gridEnabled' | 'page/guides/gridSnapEnabled' | 'page/marginEnabled' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'playback/looping' | 'playback/muted' | 'stroke/enabled' | 'backgroundColor/enabled' | 'placeholderBehavior/enabled' | 'text/automaticFontSizeEnabled' | 'text/clipLinesOutsideOfFrame' | 'text/hasClippedLines' | 'text/useLigatures' | 'text/useKerning' | 'text/useContextualLigatures' | 'text/useDiscretionaryLigatures' | 'track/automaticallyManageBlockOffsets' | 'caption/automaticFontSizeEnabled' | 'caption/clipLinesOutsideOfFrame' | 'caption/hasClippedLines' | 'caption/useLigatures' | 'caption/useKerning' | 'caption/useContextualLigatures' | 'caption/useDiscretionaryLigatures' | 'captionTrack/automaticallyManageBlockOffsets' | 'animation/slide/fade' | 'animation/pan/fade' | 'animation/blur/fade' | 'animation/zoom/fade' | 'animation/crop_zoom/fade' | 'animation/spin/fade' | 'animation/block_swipe_text/useTextColor' | 'animation/spread_text/fade' | 'animation/ken_burns/fade' | 'effect/enabled' | (string & {});
6559
+ export declare type BoolPropertyName = 'alwaysOnBottom' | 'alwaysOnTop' | 'clipped' | 'flip/horizontal' | 'flip/vertical' | 'highlightEnabled' | 'includedInExport' | 'placeholder/enabled' | 'playback/playing' | 'playback/soloPlaybackEnabled' | 'scene/aspectRatioLock' | 'scene/extendedPanningArea' | 'selected' | 'selectionEnabled' | 'transformLocked' | 'visible' | 'blur/enabled' | 'dropShadow/clip' | 'dropShadow/enabled' | 'fill/enabled' | 'fill/overprint' | 'page/guides/gridEnabled' | 'page/guides/gridSnapEnabled' | 'page/marginEnabled' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'playback/looping' | 'playback/muted' | 'stroke/enabled' | 'stroke/overprint' | 'backgroundColor/enabled' | 'placeholderBehavior/enabled' | 'text/automaticFontSizeEnabled' | 'text/clipLinesOutsideOfFrame' | 'text/hasClippedLines' | 'text/pathFlipped' | 'text/useContextualLigatures' | 'text/useDiscretionaryLigatures' | 'text/useKerning' | 'text/useLigatures' | 'track/automaticallyManageBlockOffsets' | 'caption/automaticFontSizeEnabled' | 'caption/clipLinesOutsideOfFrame' | 'caption/hasClippedLines' | 'caption/pathFlipped' | 'caption/useContextualLigatures' | 'caption/useDiscretionaryLigatures' | 'caption/useKerning' | 'caption/useLigatures' | 'captionTrack/automaticallyManageBlockOffsets' | 'animation/slide/fade' | 'animation/pan/fade' | 'animation/blur/fade' | 'animation/zoom/fade' | 'animation/crop_zoom/fade' | 'animation/spin/fade' | 'animation/block_swipe_text/useTextColor' | 'animation/spread_text/fade' | 'animation/ken_burns/fade' | 'effect/enabled' | (string & {});
6332
6560
 
6333
6561
  /**
6334
6562
  * Represents a buffer of data.
@@ -6549,6 +6777,30 @@ export declare type ContentFillMode = (typeof ContentFillModeValues)[number];
6549
6777
  /** @public */
6550
6778
  export declare const ContentFillModeValues: readonly ["Crop", "Cover", "Contain"];
6551
6779
 
6780
+ /** @public */
6781
+ export declare type ControlGizmoMoveHandleVisibility = (typeof ControlGizmoMoveHandleVisibilityValues)[number];
6782
+
6783
+ /** @public */
6784
+ export declare const ControlGizmoMoveHandleVisibilityValues: readonly ["auto", "always", "never"];
6785
+
6786
+ /** @public */
6787
+ export declare type ControlGizmoResizeHandlesVisibility = (typeof ControlGizmoResizeHandlesVisibilityValues)[number];
6788
+
6789
+ /** @public */
6790
+ export declare const ControlGizmoResizeHandlesVisibilityValues: readonly ["auto", "always", "never"];
6791
+
6792
+ /** @public */
6793
+ export declare type ControlGizmoRotateHandlesVisibility = (typeof ControlGizmoRotateHandlesVisibilityValues)[number];
6794
+
6795
+ /** @public */
6796
+ export declare const ControlGizmoRotateHandlesVisibilityValues: readonly ["auto", "always", "never"];
6797
+
6798
+ /** @public */
6799
+ export declare type ControlGizmoScaleHandlesVisibility = (typeof ControlGizmoScaleHandlesVisibilityValues)[number];
6800
+
6801
+ /** @public */
6802
+ export declare const ControlGizmoScaleHandlesVisibilityValues: readonly ["auto", "always", "never"];
6803
+
6552
6804
  /**
6553
6805
  * Options for creating a video scene.
6554
6806
  * @public
@@ -6594,6 +6846,12 @@ declare class CreativeEngine {
6594
6846
  event: EventAPI;
6595
6847
  scene: SceneAPI;
6596
6848
  variable: VariableAPI;
6849
+ /**
6850
+ * Register, run, and discover named, overridable actions. On headless Node the registry
6851
+ * starts with only the engine-default `ly.img.*` actions (no host UI), but the API is
6852
+ * identical to the browser engine.
6853
+ */
6854
+ actions: EngineActions;
6597
6855
  version: string;
6598
6856
 
6599
6857
  /**
@@ -6829,7 +7087,7 @@ export declare type DoubleClickSelectionMode = (typeof DoubleClickSelectionModeV
6829
7087
  export declare const DoubleClickSelectionModeValues: readonly ["Direct", "Hierarchical"];
6830
7088
 
6831
7089
  /** @public */
6832
- export declare type DoublePropertyName = 'playback/time' | 'playback/duration' | 'playback/timeOffset' | 'audio/totalDuration' | 'playback/trimLength' | 'playback/trimOffset' | 'fill/video/totalDuration' | 'animation/scale_loop/startDelay' | 'animation/scale_loop/holdDuration' | 'animation/scale_loop/easingDuration' | (string & {});
7090
+ export declare type DoublePropertyName = 'playback/time' | 'playback/duration' | 'playback/timeOffset' | 'audio/totalDuration' | 'playback/trimLength' | 'playback/trimOffset' | 'fill/video/totalDuration' | (string & {});
6833
7091
 
6834
7092
  /**
6835
7093
  * Information about a single audio track from a video.
@@ -8009,6 +8267,97 @@ export declare type EffectTypeLonghand = `//ly.img.ubq/effect/${EffectTypeShorth
8009
8267
  /** @public */
8010
8268
  export declare type EffectTypeShorthand = (typeof EFFECT_TYPES)[number];
8011
8269
 
8270
+ /** @public Known action ids from {@link EngineActionsRegistry}. */
8271
+ export declare type EngineActionId = keyof EngineActionsRegistry & string;
8272
+
8273
+ /** @public Info about a registered action, from {@link EngineActions.list}. */
8274
+ export declare interface EngineActionInfo {
8275
+ /** The action id, e.g. `nudge`. */
8276
+ id: string;
8277
+ /** Whether the action currently says it can run. */
8278
+ enabled: boolean;
8279
+ /** Optional JSON description of the arguments it accepts. */
8280
+ argSchema: string | null;
8281
+ }
8282
+
8283
+ /**
8284
+ * @public Named, overridable actions for one engine. Actions are either JS
8285
+ * closures you register or engine defaults (e.g. undo/redo), and
8286
+ * either kind can override the other by reusing the id.
8287
+ *
8288
+ * JS-registered actions run directly in JS, so on the web you get full fidelity:
8289
+ * {@link get} hands back the raw function and {@link run} passes args/results by
8290
+ * reference (non-serializable payloads like File/Blob work). The engine also keeps
8291
+ * a JSON trampoline per action so defaults run natively and host actions stay
8292
+ * reachable across the FFI — that path is JSON-only and async. Engine defaults you
8293
+ * have not overridden are reachable only via {@link run}; {@link get} returns undefined.
8294
+ *
8295
+ * @remarks Main-thread only. {@link get} is web-only; use run/has/list cross-platform.
8296
+ */
8297
+ export declare class EngineActions {
8298
+ #private;
8299
+
8300
+ /**
8301
+ * Register an action, replacing any existing one with the same id.
8302
+ *
8303
+ * @param id - The action id (e.g. `undo`). Reusing an engine default's id overrides it.
8304
+ * @param fn - The action body (sync or async). On the web it runs directly with
8305
+ * any JS values. Across the FFI args/results are JSON, so only serializable
8306
+ * payloads work there.
8307
+ */
8308
+ register<K extends EngineActionId>(id: K, fn: EngineActionsRegistry[K] extends (...args: any[]) => any ? EngineActionsRegistry[K] : EngineCustomActionFunction): void;
8309
+ register(id: string, fn: EngineCustomActionFunction): void;
8310
+ /**
8311
+ * Get the raw registered function for an id so you can call it synchronously.
8312
+ *
8313
+ * Returns the exact function you registered. Returns `undefined` for unknown ids
8314
+ * and engine-default native actions (which have no JS function) — use {@link run}
8315
+ * for those.
8316
+ *
8317
+ * @remarks Web-only.
8318
+ */
8319
+ get<K extends EngineActionId>(id: K): EngineActionsRegistry[K] | undefined;
8320
+ get(id: string): EngineCustomActionFunction | undefined;
8321
+ /**
8322
+ * Run an action by id and return its result as a Promise.
8323
+ *
8324
+ * JS-registered actions are called directly (args/result by reference). Engine
8325
+ * defaults go across the FFI (JSON args/result).
8326
+ *
8327
+ * @param id - The action id.
8328
+ * @param args - Arguments forwarded to the action.
8329
+ * @returns The action's result, or a rejection if the id is unknown or it threw.
8330
+ */
8331
+ run<K extends EngineActionId>(id: K, ...args: EngineActionsRegistry[K] extends (...args: infer A) => any ? A : unknown[]): Promise<EngineActionsRegistry[K] extends (...args: any[]) => infer R ? Awaited<R> : unknown>;
8332
+ run<R = unknown>(id: string, ...args: unknown[]): Promise<R>;
8333
+ /** Whether an action with this id is registered (host or engine default). */
8334
+ has(id: string): boolean;
8335
+ /**
8336
+ * Remove a host action, or revert an overridden engine default to its built-in.
8337
+ *
8338
+ * If you override an engine default (such as `select` or `undo`), unregistering the id restores
8339
+ * the default rather than leaving it unhandled. A custom id you registered yourself is removed
8340
+ * entirely. Returns `false` only when the id is unknown.
8341
+ */
8342
+ unregister(id: string): boolean;
8343
+ /** List registered actions, optionally filtered by a `*` glob matcher on the id. */
8344
+ list(options?: {
8345
+ matcher?: string;
8346
+ }): EngineActionInfo[];
8347
+
8348
+ }
8349
+
8350
+ /**
8351
+ * @public Hook for hosts to add strongly-typed action ids. Augment via
8352
+ * `declare module '@cesdk/engine'` to get autocomplete on register/run while
8353
+ * still allowing custom string ids.
8354
+ */
8355
+ export declare interface EngineActionsRegistry {
8356
+ }
8357
+
8358
+ /** @public A generic, untyped action function for custom ids. */
8359
+ export declare type EngineCustomActionFunction = (...args: any[]) => unknown;
8360
+
8012
8361
  /**
8013
8362
  * Represents an engine plugin.
8014
8363
  *
@@ -8038,10 +8387,10 @@ export declare type EnginePluginContext = {
8038
8387
  };
8039
8388
 
8040
8389
  /** @public */
8041
- export declare type EnumPropertyName = 'blend/mode' | 'contentFill/mode' | 'height/mode' | 'position/x/mode' | 'position/y/mode' | 'scene/designUnit' | 'scene/layout' | 'scene/mode' | 'width/mode' | 'page/guides/source' | 'stroke/cornerGeometry' | 'stroke/position' | 'stroke/style' | 'text/horizontalAlignment' | 'text/verticalAlignment' | 'cutout/type' | 'caption/horizontalAlignment' | 'caption/verticalAlignment' | 'animationEasing' | 'textAnimationWritingStyle' | 'animation/grow/direction' | 'animation/wipe/direction' | 'animation/baseline/direction' | 'animation/spin/direction' | 'animation/spin_loop/direction' | 'animation/jump_loop/direction' | 'animation/typewriter_text/writingStyle' | 'animation/block_swipe_text/direction' | 'animation/merge_text/direction' | 'animation/ken_burns/direction' | 'animation/scale_loop/direction' | 'fill/pixelStream/orientation' | 'shape/vector_path/fillRule' | (string & {});
8390
+ export declare type EnumPropertyName = 'blend/mode' | 'contentFill/horizontalAlignment' | 'contentFill/mode' | 'contentFill/verticalAlignment' | 'height/mode' | 'position/x/mode' | 'position/y/mode' | 'scene/designUnit' | 'scene/fontSizeUnit' | 'scene/layout' | 'scene/mode' | 'width/mode' | 'page/guides/source' | 'stroke/cap' | 'stroke/cornerGeometry' | 'stroke/dashEndCap' | 'stroke/dashStartCap' | 'stroke/endCap' | 'stroke/position' | 'stroke/startCap' | 'stroke/style' | 'text/horizontalAlignment' | 'text/verticalAlignment' | 'cutout/type' | 'caption/horizontalAlignment' | 'caption/verticalAlignment' | 'animationEasing' | 'textAnimationWritingStyle' | 'animation/grow/direction' | 'animation/wipe/direction' | 'animation/baseline/direction' | 'animation/spin/direction' | 'animation/spin_loop/direction' | 'animation/jump_loop/direction' | 'animation/typewriter_text/writingStyle' | 'animation/block_swipe_text/direction' | 'animation/merge_text/direction' | 'animation/ken_burns/direction' | 'fill/pixelStream/orientation' | 'shape/vector_path/fillRule' | (string & {});
8042
8391
 
8043
8392
  /** @public */
8044
- export declare type EnumValues = BlendMode | ContentFillMode | HeightMode | PageGuidesSource | PositionXMode | PositionYMode | SceneDesignUnit | SceneLayout | SceneMode | WidthMode | StrokeCap | StrokeCornerGeometry | StrokePosition | StrokeStyle | TextHorizontalAlignment | TextVerticalAlignment | CutoutType | CaptionHorizontalAlignment | CaptionVerticalAlignment | AnimationEasing | TextAnimationWritingStyle | AnimationGrowDirection | AnimationWipeDirection | AnimationBaselineDirection | AnimationSpinDirection | AnimationSpinLoopDirection | AnimationJumpLoopDirection | AnimationTypewriterTextWritingStyle | AnimationBlockSwipeTextDirection | AnimationMergeTextDirection | AnimationKenBurnsDirection | AnimationScaleLoopDirection | FillPixelStreamOrientation | ShapeVectorPathFillRule | (string & {});
8393
+ export declare type EnumValues = BlendMode | HorizontalContentFillAlignment | ContentFillMode | VerticalContentFillAlignment | HeightMode | PositionXMode | PositionYMode | SceneDesignUnit | SceneFontSizeUnit | SceneLayout | SceneMode | WidthMode | PageGuidesSource | StrokeCap | StrokeCornerGeometry | StrokeDashEndCap | StrokeDashStartCap | StrokeEndCap | StrokePosition | StrokeStartCap | StrokeStyle | TextHorizontalAlignment | TextVerticalAlignment | CutoutType | CaptionHorizontalAlignment | CaptionVerticalAlignment | AnimationEasing | TextAnimationWritingStyle | AnimationGrowDirection | AnimationWipeDirection | AnimationBaselineDirection | AnimationSpinDirection | AnimationSpinLoopDirection | AnimationJumpLoopDirection | AnimationTypewriterTextWritingStyle | AnimationBlockSwipeTextDirection | AnimationMergeTextDirection | AnimationKenBurnsDirection | FillPixelStreamOrientation | ShapeVectorPathFillRule | (string & {});
8045
8394
 
8046
8395
  /**
8047
8396
  * @public Subscribe to block lifecycle events in the design engine.
@@ -8268,7 +8617,7 @@ declare interface Flip {
8268
8617
  }
8269
8618
 
8270
8619
  /** @public */
8271
- export declare type FloatPropertyName = 'globalBoundingBox/height' | 'globalBoundingBox/width' | 'globalBoundingBox/x' | 'globalBoundingBox/y' | 'height' | 'lastFrame/height' | 'lastFrame/width' | 'lastFrame/x' | 'lastFrame/y' | 'position/x' | 'position/y' | 'rotation' | 'scene/dpi' | 'scene/pageDimensions/height' | 'scene/pageDimensions/width' | 'scene/pixelScaleFactor' | 'width' | 'camera/pixelRatio' | 'camera/resolution/height' | 'camera/resolution/width' | 'camera/zoomLevel' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'page/guides/gridSpacingX' | 'page/guides/gridSpacingY' | 'page/margin/bottom' | 'page/margin/left' | 'page/margin/right' | 'page/margin/top' | 'playback/speed' | 'playback/volume' | 'stroke/width' | 'opacity' | 'backgroundColor/cornerRadius' | 'backgroundColor/paddingBottom' | 'backgroundColor/paddingLeft' | 'backgroundColor/paddingRight' | 'backgroundColor/paddingTop' | 'text/fontSize' | 'text/letterSpacing' | 'text/lineHeight' | 'text/maxAutomaticFontSize' | 'text/minAutomaticFontSize' | 'text/paragraphSpacing' | 'cutout/offset' | 'cutout/smoothing' | 'caption/fontSize' | 'caption/letterSpacing' | 'caption/lineHeight' | 'caption/maxAutomaticFontSize' | 'caption/minAutomaticFontSize' | 'caption/paragraphSpacing' | 'animation/slide/direction' | 'textAnimationOverlap' | 'animation/pan/direction' | 'animation/pan/distance' | 'animation/blur/intensity' | 'animation/grow/scaleFactor' | 'animation/crop_zoom/scale' | 'animation/spin/intensity' | 'animation/blur_loop/intensity' | 'animation/pulsating_loop/intensity' | 'animation/breathing_loop/intensity' | 'animation/jump_loop/intensity' | 'animation/sway_loop/intensity' | 'animation/scale_loop/startScale' | 'animation/scale_loop/endScale' | 'animation/spread_text/intensity' | 'animation/merge_text/intensity' | 'animation/ken_burns/travelDistanceRatio' | 'animation/ken_burns/zoomIntensity' | 'blur/uniform/intensity' | 'blur/linear/blurRadius' | 'blur/linear/x1' | 'blur/linear/x2' | 'blur/linear/y1' | 'blur/linear/y2' | 'blur/mirrored/blurRadius' | 'blur/mirrored/gradientSize' | 'blur/mirrored/size' | 'blur/mirrored/x1' | 'blur/mirrored/x2' | 'blur/mirrored/y1' | 'blur/mirrored/y2' | 'blur/radial/blurRadius' | 'blur/radial/gradientRadius' | 'blur/radial/radius' | 'blur/radial/x' | 'blur/radial/y' | 'effect/adjustments/blacks' | 'effect/adjustments/brightness' | 'effect/adjustments/clarity' | 'effect/adjustments/contrast' | 'effect/adjustments/exposure' | 'effect/adjustments/gamma' | 'effect/adjustments/highlights' | 'effect/adjustments/saturation' | 'effect/adjustments/shadows' | 'effect/adjustments/sharpness' | 'effect/adjustments/temperature' | 'effect/adjustments/whites' | 'effect/cross_cut/offset' | 'effect/cross_cut/slices' | 'effect/cross_cut/speedV' | 'effect/cross_cut/time' | 'effect/dot_pattern/blur' | 'effect/dot_pattern/dots' | 'effect/dot_pattern/size' | 'effect/duotone_filter/intensity' | 'effect/extrude_blur/amount' | 'effect/glow/amount' | 'effect/glow/darkness' | 'effect/glow/size' | 'effect/green_screen/colorMatch' | 'effect/green_screen/smoothness' | 'effect/green_screen/spill' | 'effect/half_tone/angle' | 'effect/half_tone/scale' | 'effect/linocut/scale' | 'effect/liquid/amount' | 'effect/liquid/scale' | 'effect/liquid/time' | 'effect/lut_filter/intensity' | 'effect/outliner/amount' | 'effect/outliner/passthrough' | 'effect/posterize/levels' | 'effect/radial_pixel/radius' | 'effect/radial_pixel/segments' | 'effect/recolor/brightnessMatch' | 'effect/recolor/colorMatch' | 'effect/recolor/smoothness' | 'effect/shifter/amount' | 'effect/shifter/angle' | 'effect/tilt_shift/amount' | 'effect/tilt_shift/position' | 'effect/tv_glitch/distortion' | 'effect/tv_glitch/distortion2' | 'effect/tv_glitch/rollSpeed' | 'effect/tv_glitch/speed' | 'effect/vignette/darkness' | 'effect/vignette/offset' | 'fill/gradient/linear/endPointX' | 'fill/gradient/linear/endPointY' | 'fill/gradient/linear/startPointX' | 'fill/gradient/linear/startPointY' | 'fill/gradient/radial/centerPointX' | 'fill/gradient/radial/centerPointY' | 'fill/gradient/radial/radius' | 'fill/gradient/conical/centerPointX' | 'fill/gradient/conical/centerPointY' | 'shape/rect/cornerRadiusBL' | 'shape/rect/cornerRadiusBR' | 'shape/rect/cornerRadiusTL' | 'shape/rect/cornerRadiusTR' | 'shape/polygon/cornerRadius' | 'shape/star/innerDiameter' | 'shape/vector_path/cornerRadius' | 'shape/vector_path/height' | 'shape/vector_path/width' | (string & {});
8620
+ export declare type FloatPropertyName = 'globalBoundingBox/height' | 'globalBoundingBox/width' | 'globalBoundingBox/x' | 'globalBoundingBox/y' | 'height' | 'lastFrame/height' | 'lastFrame/width' | 'lastFrame/x' | 'lastFrame/y' | 'movement/constraint' | 'position/x' | 'position/y' | 'rotation' | 'scene/dpi' | 'scene/pageDimensions/height' | 'scene/pageDimensions/width' | 'scene/pixelScaleFactor' | 'width' | 'camera/pixelRatio' | 'camera/resolution/height' | 'camera/resolution/width' | 'camera/zoomLevel' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'page/guides/gridSpacingX' | 'page/guides/gridSpacingY' | 'page/margin/bottom' | 'page/margin/left' | 'page/margin/right' | 'page/margin/top' | 'page/marginScale' | 'playback/speed' | 'playback/volume' | 'stroke/dashOffset' | 'stroke/width' | 'opacity' | 'backgroundColor/cornerRadius' | 'backgroundColor/paddingBottom' | 'backgroundColor/paddingLeft' | 'backgroundColor/paddingRight' | 'backgroundColor/paddingTop' | 'text/fontSize' | 'text/letterSpacing' | 'text/lineHeight' | 'text/maxAutomaticFontSize' | 'text/minAutomaticFontSize' | 'text/paragraphSpacing' | 'text/pathOffset' | 'cutout/offset' | 'cutout/smoothing' | 'caption/fontSize' | 'caption/letterSpacing' | 'caption/lineHeight' | 'caption/maxAutomaticFontSize' | 'caption/minAutomaticFontSize' | 'caption/paragraphSpacing' | 'caption/pathOffset' | 'animation/slide/direction' | 'textAnimationOverlap' | 'animation/pan/direction' | 'animation/pan/distance' | 'animation/blur/intensity' | 'animation/grow/scaleFactor' | 'animation/crop_zoom/scale' | 'animation/spin/intensity' | 'animation/blur_loop/intensity' | 'animation/pulsating_loop/intensity' | 'animation/breathing_loop/intensity' | 'animation/jump_loop/intensity' | 'animation/sway_loop/intensity' | 'animation/spread_text/intensity' | 'animation/merge_text/intensity' | 'animation/ken_burns/travelDistanceRatio' | 'animation/ken_burns/zoomIntensity' | 'blur/uniform/intensity' | 'blur/linear/blurRadius' | 'blur/linear/x1' | 'blur/linear/x2' | 'blur/linear/y1' | 'blur/linear/y2' | 'blur/mirrored/blurRadius' | 'blur/mirrored/gradientSize' | 'blur/mirrored/size' | 'blur/mirrored/x1' | 'blur/mirrored/x2' | 'blur/mirrored/y1' | 'blur/mirrored/y2' | 'blur/radial/blurRadius' | 'blur/radial/gradientRadius' | 'blur/radial/radius' | 'blur/radial/x' | 'blur/radial/y' | 'effect/adjustments/blacks' | 'effect/adjustments/brightness' | 'effect/adjustments/clarity' | 'effect/adjustments/contrast' | 'effect/adjustments/exposure' | 'effect/adjustments/gamma' | 'effect/adjustments/highlights' | 'effect/adjustments/saturation' | 'effect/adjustments/shadows' | 'effect/adjustments/sharpness' | 'effect/adjustments/temperature' | 'effect/adjustments/whites' | 'effect/cross_cut/offset' | 'effect/cross_cut/slices' | 'effect/cross_cut/speedV' | 'effect/cross_cut/time' | 'effect/dot_pattern/blur' | 'effect/dot_pattern/dots' | 'effect/dot_pattern/size' | 'effect/duotone_filter/intensity' | 'effect/extrude_blur/amount' | 'effect/glow/amount' | 'effect/glow/darkness' | 'effect/glow/size' | 'effect/green_screen/colorMatch' | 'effect/green_screen/smoothness' | 'effect/green_screen/spill' | 'effect/half_tone/angle' | 'effect/half_tone/scale' | 'effect/linocut/scale' | 'effect/liquid/amount' | 'effect/liquid/scale' | 'effect/liquid/time' | 'effect/lut_filter/intensity' | 'effect/outliner/amount' | 'effect/outliner/passthrough' | 'effect/posterize/levels' | 'effect/radial_pixel/radius' | 'effect/radial_pixel/segments' | 'effect/recolor/brightnessMatch' | 'effect/recolor/colorMatch' | 'effect/recolor/smoothness' | 'effect/shifter/amount' | 'effect/shifter/angle' | 'effect/tilt_shift/amount' | 'effect/tilt_shift/position' | 'effect/tv_glitch/distortion' | 'effect/tv_glitch/distortion2' | 'effect/tv_glitch/rollSpeed' | 'effect/tv_glitch/speed' | 'effect/vignette/darkness' | 'effect/vignette/offset' | 'fill/gradient/linear/endPointX' | 'fill/gradient/linear/endPointY' | 'fill/gradient/linear/startPointX' | 'fill/gradient/linear/startPointY' | 'fill/gradient/radial/centerPointX' | 'fill/gradient/radial/centerPointY' | 'fill/gradient/radial/radius' | 'fill/gradient/conical/centerPointX' | 'fill/gradient/conical/centerPointY' | 'shape/rect/cornerRadiusBL' | 'shape/rect/cornerRadiusBR' | 'shape/rect/cornerRadiusTL' | 'shape/rect/cornerRadiusTR' | 'shape/polygon/cornerRadius' | 'shape/star/cornerRadius' | 'shape/star/innerDiameter' | 'shape/vector_path/cornerRadius' | 'shape/vector_path/height' | 'shape/vector_path/width' | (string & {});
8272
8621
 
8273
8622
  /**
8274
8623
  * Individual font within a typeface. Field optionality matches `@cesdk/engine`
@@ -9470,10 +9819,10 @@ export declare type SceneLayout = (typeof SceneLayoutValues)[number];
9470
9819
  /** @public */
9471
9820
  export declare const SceneLayoutValues: readonly ["Free", "VerticalStack", "HorizontalStack", "DepthStack"];
9472
9821
 
9473
- /** @public @deprecated Since v1.72. Scene mode no longer affects engine behavior. */
9822
+ /** @public */
9474
9823
  export declare type SceneMode = (typeof SceneModeValues)[number];
9475
9824
 
9476
- /** @public @deprecated Since v1.72. Scene mode no longer affects engine behavior. */
9825
+ /** @public */
9477
9826
  export declare const SceneModeValues: readonly ["Design", "Video"];
9478
9827
 
9479
9828
  /**
@@ -9494,29 +9843,33 @@ export declare const SceneModeValues: readonly ["Design", "Video"];
9494
9843
  export declare type Scope = 'text/edit' | 'text/character' | 'fill/change' | 'fill/changeType' | 'stroke/change' | 'shape/change' | 'layer/move' | 'layer/resize' | 'layer/rotate' | 'layer/flip' | 'layer/crop' | 'layer/opacity' | 'layer/blendMode' | 'layer/visibility' | 'layer/clipping' | 'appearance/adjustments' | 'appearance/filter' | 'appearance/effect' | 'appearance/blur' | 'appearance/shadow' | 'appearance/animation' | 'lifecycle/destroy' | 'lifecycle/duplicate' | 'editor/add' | 'editor/select';
9495
9844
 
9496
9845
  /** @public */
9497
- export declare type SettingBoolPropertyName = 'alwaysHighlightPlaceholders' | 'doubleClickToCropEnabled' | 'showBuildVersion' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'blockAnimations/enabled' | 'playback/showAllBlocks' | 'renderTextCursorAndSelectionInEngine' | 'touch/dragStartCanSelect' | 'touch/singlePointPanning' | 'mouse/enableZoom' | 'mouse/enableScroll' | 'controlGizmo/showCropHandles' | 'controlGizmo/showMoveHandles' | 'controlGizmo/dynamicMoveHandleVisibility' | 'controlGizmo/showResizeHandles' | 'controlGizmo/showScaleHandles' | 'controlGizmo/showRotateHandles' | 'controlGizmo/showCropScaleHandles' | 'page/title/canEdit' | 'page/title/show' | 'page/title/showPageTitleTemplate' | 'page/title/appendPageName' | 'page/title/showOnSinglePage' | 'page/dimOutOfPageAreas' | 'page/allowCropInteraction' | 'page/allowResizeInteraction' | 'page/restrictResizeInteractionToFixedAspectRatio' | 'page/allowRotateInteraction' | 'page/allowMoveInteraction' | 'page/marqueeSelectOnBodyDrag' | 'page/restrictPageSelectionToBorderAndTitle' | 'page/moveChildrenWhenCroppingFill' | 'page/selectWhenNoBlocksSelected' | 'page/highlightWhenCropping' | 'page/highlightDropTarget' | 'page/reparentBlocksToSceneWhenOutOfPage' | 'colorMaskingSettings/secondPass' | 'clampThumbnailTextureSizes' | 'useSystemFontFallback' | 'forceSystemEmojis' | 'features/textEditModeTransformHandlesEnabled' | 'features/videoStreamingEnabled' | 'grid/enabled' | 'grid/snapEnabled' | 'features/enableAutomaticEnumerations' | 'features/transparentClickThroughEnabled' | 'features/fontLineGapEnabled' | (string & {});
9846
+ export declare type SettingBoolPropertyName = 'doubleClickToCropEnabled' | 'showBuildVersion' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'blockAnimations/enabled' | 'playback/showAllBlocks' | 'grid/enabled' | 'grid/snapEnabled' | 'archival/bundleOnlyUsedFontVariants' | 'touch/dragStartCanSelect' | 'touch/singlePointPanning' | 'mouse/enableZoom' | 'mouse/enableScroll' | 'controlGizmo/showCropHandles' | 'controlGizmo/showMoveHandles' | 'controlGizmo/dynamicMoveHandleVisibility' | 'controlGizmo/showResizeHandles' | 'controlGizmo/showScaleHandles' | 'controlGizmo/showRotateHandles' | 'controlGizmo/showCropScaleHandles' | 'page/title/show' | 'page/title/showPageTitleTemplate' | 'page/title/appendPageName' | 'page/title/showOnSinglePage' | 'page/title/canEdit' | 'page/dimOutOfPageAreas' | 'page/allowCropInteraction' | 'page/allowResizeInteraction' | 'page/restrictResizeInteractionToFixedAspectRatio' | 'page/allowRotateInteraction' | 'page/allowMoveInteraction' | 'page/marqueeSelectOnBodyDrag' | 'page/restrictPageSelectionToBorderAndTitle' | 'page/moveChildrenWhenCroppingFill' | 'page/selectWhenNoBlocksSelected' | 'page/highlightWhenCropping' | 'page/allowShapeChange' | 'page/highlightDropTarget' | 'page/reparentBlocksToSceneWhenOutOfPage' | 'page/flipDimensionsOn90DegreeCropRotation' | 'clampThumbnailTextureSizes' | 'useSystemFontFallback' | 'forceSystemEmojis' | (string & {});
9498
9847
 
9499
9848
  /** @public */
9500
- export declare type SettingColorPropertyName = 'clearColor' | 'handleFillColor' | 'highlightColor' | 'pageHighlightColor' | 'placeholderHighlightColor' | 'snappingGuideColor' | 'rotationSnappingGuideColor' | 'cropOverlayColor' | 'textVariableHighlightColor' | 'borderOutlineColor' | 'progressColor' | 'errorStateColor' | 'page/title/color' | 'page/marginFillColor' | 'page/marginFrameColor' | 'page/innerBorderColor' | 'page/outerBorderColor' | 'colorMaskingSettings/maskColor' | 'grid/color' | (string & {});
9849
+ export declare type SettingColorPropertyName = 'clearColor' | 'handleFillColor' | 'highlightColor' | 'pageHighlightColor' | 'placeholderHighlightColor' | 'snappingGuideColor' | 'rotationSnappingGuideColor' | 'cropOverlayColor' | 'textVariableHighlightColor' | 'borderOutlineColor' | 'progressColor' | 'errorStateColor' | 'grid/color' | 'page/title/color' | 'page/marginFillColor' | 'page/marginFrameColor' | 'page/innerBorderColor' | 'page/outerBorderColor' | 'colorMaskingSettings/maskColor' | (string & {});
9501
9850
 
9502
9851
  /** @public */
9503
- export declare type SettingEnumPropertyName = 'touch/pinchAction' | 'touch/rotateAction' | 'camera/clamping/overshootMode' | 'doubleClickSelectionMode' | 'colorPicker/colorMode' | 'timeline/trackVisibility' | (string & {});
9852
+ export declare type SettingEnumPropertyName = 'touch/pinchAction' | 'touch/rotateAction' | 'camera/clamping/overshootMode' | 'controlGizmo/moveHandleVisibility' | 'controlGizmo/resizeHandlesVisibility' | 'controlGizmo/scaleHandlesVisibility' | 'controlGizmo/rotateHandlesVisibility' | 'doubleClickSelectionMode' | 'colorPicker/colorMode' | 'timeline/trackVisibility' | (string & {});
9504
9853
 
9505
9854
  /** @public */
9506
9855
  export declare type SettingEnumType = {
9507
9856
  'touch/pinchAction': TouchPinchAction;
9508
9857
  'touch/rotateAction': TouchRotateAction;
9509
9858
  'camera/clamping/overshootMode': CameraClampingOvershootMode;
9859
+ 'controlGizmo/moveHandleVisibility': ControlGizmoMoveHandleVisibility;
9860
+ 'controlGizmo/resizeHandlesVisibility': ControlGizmoResizeHandlesVisibility;
9861
+ 'controlGizmo/scaleHandlesVisibility': ControlGizmoScaleHandlesVisibility;
9862
+ 'controlGizmo/rotateHandlesVisibility': ControlGizmoRotateHandlesVisibility;
9510
9863
  doubleClickSelectionMode: DoubleClickSelectionMode;
9511
9864
  'colorPicker/colorMode': ColorPickerColorMode;
9512
9865
  'timeline/trackVisibility': TimelineTrackVisibility;
9513
9866
  };
9514
9867
 
9515
9868
  /** @public */
9516
- export declare type SettingEnumValues = TouchPinchAction | TouchRotateAction | CameraClampingOvershootMode | DoubleClickSelectionMode | ColorPickerColorMode | TimelineTrackVisibility | (string & {});
9869
+ export declare type SettingEnumValues = TouchPinchAction | TouchRotateAction | CameraClampingOvershootMode | ControlGizmoMoveHandleVisibility | ControlGizmoResizeHandlesVisibility | ControlGizmoScaleHandlesVisibility | ControlGizmoRotateHandlesVisibility | DoubleClickSelectionMode | ColorPickerColorMode | TimelineTrackVisibility | (string & {});
9517
9870
 
9518
9871
  /** @public */
9519
- export declare type SettingFloatPropertyName = 'positionSnappingThreshold' | 'rotationSnappingThreshold' | 'controlGizmo/blockScaleDownLimit' | 'listIndentPerLevel' | 'grid/spacingX' | 'grid/spacingY' | (string & {});
9872
+ export declare type SettingFloatPropertyName = 'positionSnappingThreshold' | 'rotationSnappingThreshold' | 'grid/spacingX' | 'grid/spacingY' | 'controlGizmo/blockScaleDownLimit' | 'listIndentPerLevel' | (string & {});
9520
9873
 
9521
9874
  /** @public */
9522
9875
  export declare type SettingIntPropertyName = 'maxImageSize' | 'maxPreviewResolution' | (string & {});
@@ -9546,15 +9899,15 @@ export declare interface Settings {
9546
9899
  'controlGizmo/showCropHandles': boolean;
9547
9900
  /** Whether to display the outer handles that scale the full image during crop. */
9548
9901
  'controlGizmo/showCropScaleHandles': boolean;
9549
- /** Whether to show the move handles. */
9902
+ /** @deprecated Use `controlGizmo/moveHandleVisibility`. `false` hides the move handle. */
9550
9903
  'controlGizmo/showMoveHandles': boolean;
9551
- /** Whether the move handle visibility is dynamic based on block size. Set to false to always show. */
9904
+ /** @deprecated Use `controlGizmo/moveHandleVisibility`. `false` shows the move handle at any block size. */
9552
9905
  'controlGizmo/dynamicMoveHandleVisibility': boolean;
9553
- /** Whether to display the non-proportional resize handles (edge handles). */
9906
+ /** @deprecated Use `controlGizmo/resizeHandlesVisibility`. `false` hides the edge (resize) handles. */
9554
9907
  'controlGizmo/showResizeHandles': boolean;
9555
- /** Whether to show the rotation handles. */
9908
+ /** @deprecated Use `controlGizmo/rotateHandlesVisibility`. `false` hides the rotation handle. */
9556
9909
  'controlGizmo/showRotateHandles': boolean;
9557
- /** Whether to display the proportional scale handles (corner handles). */
9910
+ /** @deprecated Use `controlGizmo/scaleHandlesVisibility`. `false` hides the corner (scale) handles. */
9558
9911
  'controlGizmo/showScaleHandles': boolean;
9559
9912
  /** Enable double-click to enter crop mode. */
9560
9913
  doubleClickToCropEnabled: boolean;
@@ -9730,6 +10083,26 @@ export declare interface Settings {
9730
10083
  handleFillColor: Color;
9731
10084
  /** Color of the grid lines. */
9732
10085
  'grid/color': Color;
10086
+ /**
10087
+ * When the move handle is shown: 'auto' (by block size), 'always' (even while editing text, not in crop
10088
+ * mode), or 'never'. Replaces deprecated `controlGizmo/showMoveHandles`/`dynamicMoveHandleVisibility`.
10089
+ */
10090
+ 'controlGizmo/moveHandleVisibility': 'auto' | 'always' | 'never';
10091
+ /**
10092
+ * When the edge (resize) handles are shown: 'auto' (default), 'always' (even while editing text, not in
10093
+ * crop mode), or 'never'. Replaces the deprecated `controlGizmo/showResizeHandles`.
10094
+ */
10095
+ 'controlGizmo/resizeHandlesVisibility': 'auto' | 'always' | 'never';
10096
+ /**
10097
+ * When the corner (scale) handles are shown: 'auto' (default), 'always' (even while editing text, not in
10098
+ * crop mode), or 'never'. Replaces the deprecated `controlGizmo/showScaleHandles`.
10099
+ */
10100
+ 'controlGizmo/scaleHandlesVisibility': 'auto' | 'always' | 'never';
10101
+ /**
10102
+ * When the rotation handle is shown: 'auto' (default), 'always' (even while editing text, not in crop
10103
+ * mode), or 'never'. Replaces the deprecated `controlGizmo/showRotateHandles`.
10104
+ */
10105
+ 'controlGizmo/rotateHandlesVisibility': 'auto' | 'always' | 'never';
9733
10106
  /** The selection mode for double-click: Direct selects the clicked element, Hierarchical traverses the hierarchy. */
9734
10107
  doubleClickSelectionMode: 'Direct' | 'Hierarchical';
9735
10108
  /** The action performed for pinch gestures: None, Zoom, Scale, Auto, or Dynamic. */
@@ -9768,6 +10141,7 @@ export declare interface Settings {
9768
10141
 
9769
10142
 
9770
10143
 
10144
+
9771
10145
 
9772
10146
 
9773
10147
  }
@@ -9968,7 +10342,7 @@ export declare interface SpotColor {
9968
10342
  }
9969
10343
 
9970
10344
  /** @public */
9971
- export declare type StringPropertyName = 'name' | 'scene/pageFormatId' | 'type' | 'uuid' | 'page/titleTemplate' | 'audio/fileURI' | 'text/externalReference' | 'text/fontFileUri' | 'text/text' | 'text/typeface' | 'cutout/path' | 'caption/externalReference' | 'caption/fontFileUri' | 'caption/text' | 'caption/typeface' | 'effect/lut_filter/lutFileURI' | 'fill/image/externalReference' | 'fill/image/imageFileURI' | 'fill/image/previewFileURI' | 'fill/video/fileURI' | 'shape/vector_path/path' | (string & {});
10345
+ export declare type StringPropertyName = 'name' | 'scene/pageFormatId' | 'type' | 'uuid' | 'page/titleTemplate' | 'audio/fileURI' | 'text/externalReference' | 'text/fontFileUri' | 'text/pathExternalRef' | 'text/text' | 'text/typeface' | 'cutout/path' | 'caption/externalReference' | 'caption/fontFileUri' | 'caption/pathExternalRef' | 'caption/text' | 'caption/typeface' | 'effect/lut_filter/filterId' | 'effect/lut_filter/lutFileURI' | 'fill/image/externalReference' | 'fill/image/imageFileURI' | 'fill/image/previewFileURI' | 'fill/video/fileURI' | 'shape/vector_path/path' | (string & {});
9972
10346
 
9973
10347
  /** @public */
9974
10348
  export declare type StrokeCap = (typeof StrokeCapValues)[number];
@@ -9982,12 +10356,36 @@ export declare type StrokeCornerGeometry = (typeof StrokeCornerGeometryValues)[n
9982
10356
  /** @public */
9983
10357
  export declare const StrokeCornerGeometryValues: readonly ["Bevel", "Miter", "Round"];
9984
10358
 
10359
+ /** @public */
10360
+ export declare type StrokeDashEndCap = (typeof StrokeDashEndCapValues)[number];
10361
+
10362
+ /** @public */
10363
+ export declare const StrokeDashEndCapValues: readonly ["Butt", "Round", "Square"];
10364
+
10365
+ /** @public */
10366
+ export declare type StrokeDashStartCap = (typeof StrokeDashStartCapValues)[number];
10367
+
10368
+ /** @public */
10369
+ export declare const StrokeDashStartCapValues: readonly ["Butt", "Round", "Square"];
10370
+
10371
+ /** @public */
10372
+ export declare type StrokeEndCap = (typeof StrokeEndCapValues)[number];
10373
+
10374
+ /** @public */
10375
+ export declare const StrokeEndCapValues: readonly ["Butt", "Round", "Square"];
10376
+
9985
10377
  /** @public */
9986
10378
  export declare type StrokePosition = (typeof StrokePositionValues)[number];
9987
10379
 
9988
10380
  /** @public */
9989
10381
  export declare const StrokePositionValues: readonly ["Center", "Inner", "Outer"];
9990
10382
 
10383
+ /** @public */
10384
+ export declare type StrokeStartCap = (typeof StrokeStartCapValues)[number];
10385
+
10386
+ /** @public */
10387
+ export declare const StrokeStartCapValues: readonly ["Butt", "Round", "Square"];
10388
+
9991
10389
  /** @public */
9992
10390
  export declare type StrokeStyle = (typeof StrokeStyleValues)[number];
9993
10391
 
@@ -10108,6 +10506,38 @@ export { TextHorizontalAlignment }
10108
10506
  /** @public */
10109
10507
  export declare const TextHorizontalAlignmentValues: readonly ["Left", "Right", "Center", "Auto"];
10110
10508
 
10509
+ /**
10510
+ * Represents a single contiguous text run with uniform formatting.
10511
+ *
10512
+ * @public
10513
+ */
10514
+ export declare interface TextRunInfo {
10515
+ /** Start grapheme index (inclusive). */
10516
+ from: number;
10517
+ /** End grapheme index (exclusive). */
10518
+ to: number;
10519
+ /** The text content of this run. */
10520
+ text: string;
10521
+ /** The text color. */
10522
+ color: Color;
10523
+ /** The font weight. */
10524
+ fontWeight: FontWeight;
10525
+ /** The font style. */
10526
+ fontStyle: FontStyle;
10527
+ /** The font size in points. */
10528
+ fontSize: number;
10529
+ /** The text case transformation. */
10530
+ textCase: TextCase;
10531
+ /** The typeface used by this run. */
10532
+ typeface: Typeface;
10533
+ /** The resolved font file URI. */
10534
+ resolvedFontFileUri: string;
10535
+ /** The text decoration configuration of this run. */
10536
+ textDecoration: TextDecorationConfig;
10537
+ /** Additional kerning offset in em units. */
10538
+ kerning: number;
10539
+ }
10540
+
10111
10541
  /** @public */
10112
10542
  declare type TextVerticalAlignment = (typeof TextVerticalAlignmentValues)[number];
10113
10543
  export { TextVerticalAlignment }