@adobe/ccweb-add-on-sdk-types 1.22.0 → 1.24.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.
@@ -22,7 +22,7 @@
22
22
  * SOFTWARE.
23
23
  ********************************************************************************/
24
24
 
25
- import type { mat2d } from "gl-matrix";
25
+ import { mat2d } from "gl-matrix";
26
26
 
27
27
  /**
28
28
  * AddOnData class provides APIs to read, write, remove private metadata to a Node.
@@ -85,6 +85,7 @@ declare namespace ApiConstants {
85
85
  TextScriptStyle,
86
86
  EditorEvent,
87
87
  VisualEffectType,
88
+ TextStyleSource,
88
89
  ParagraphListType,
89
90
  OrderedListNumbering
90
91
  };
@@ -99,11 +100,8 @@ declare interface ApiModuleExport {
99
100
  }
100
101
 
101
102
  /**
102
- * <InlineAlert slots="text" variant="warning"/>
103
- *
104
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
105
- *
106
- * @experimental
103
+ * Area text: both width and height are explicitly set. If text content is too long to fit, the end of the text will be
104
+ * clipped. If text content is short, the frame's bounds will occupy extra height that is just blank space.
107
105
  */
108
106
  export declare interface AreaTextLayout {
109
107
  type: TextLayout.area;
@@ -139,8 +137,8 @@ declare enum ArrowHeadType {
139
137
  }
140
138
 
141
139
  /**
142
- * ArtboardList represents an ordered list of ArtboardNodes arranged in a timeline sequence, where they are called "scenes."
143
- * All items in the list are children of a single {@link PageNode}.
140
+ * ArtboardList represents an ordered list of ArtboardNodes, which are the children of one {@link PageNode}. If multiple
141
+ * artboards are present, each represents a keyframe "scene" in the page's animation timeline.
144
142
  *
145
143
  * ArtboardList also provides APIs for adding/removing artboards from the page. ArtboardList is never empty: it is illegal to
146
144
  * remove the last remaining artboard from the list.
@@ -157,13 +155,10 @@ export declare class ArtboardList extends RestrictedItemList<ArtboardNode> {
157
155
  }
158
156
 
159
157
  /**
160
- * An ArtboardNode represents an artboard object in the scenegraph. All user visual content must be contained on an artboard.
161
- * Artboards are always contained on a {@link PageNode}; when a page contains multiple artboards, the artboards represent
162
- * "scenes" in a linear timeline sequence.
158
+ * An ArtboardNode represents the topmost container of visual content within a {@link PageNode}. When a page contains
159
+ * multiple artboards, each represents a keyframe "scene" in the page's animation timeline.
163
160
  *
164
161
  * To create a new artboard, see {@link ArtboardList.addArtboard}.
165
- *
166
- * Please note that creating and deleting an artboard in a single frame will crash the editor.
167
162
  */
168
163
  export declare class ArtboardNode extends VisualNode implements Readonly<IRectangularNode>, ContainerNode {
169
164
  /**
@@ -172,11 +167,13 @@ export declare class ArtboardNode extends VisualNode implements Readonly<IRectan
172
167
  * hold children in various discrete "slots"; this `allChildren` list includes *all* such children and reflects their
173
168
  * overall display z-order.
174
169
  *
175
- * The children of an Artboard are always other Node classes (never the more minimal BaseNode).
170
+ * The children of an Artboard are all subclasses of Node (not just the more minimal BaseNode or VisualNode).
176
171
  */
177
172
  get allChildren(): Readonly<Iterable<Node>>;
178
173
  /**
179
- * The node's children. Use the methods on this ItemList object to get, add, and remove children.
174
+ * The artboards's regular children (does not include any "background layer" content if present; use {@link allChildren}
175
+ * for a read-only view that includes background content). Use the methods on this `children` ItemList object to get,
176
+ * add, and remove regular children.
180
177
  */
181
178
  get children(): ItemList<Node>;
182
179
  /**
@@ -204,11 +201,8 @@ export declare class ArtboardNode extends VisualNode implements Readonly<IRectan
204
201
  }
205
202
 
206
203
  /**
207
- * <InlineAlert slots="text" variant="warning"/>
208
- *
209
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
210
- *
211
- * @experimental
204
+ * Auto-height text: Width is explicitly set, and text wraps to use as much vertical space as necessary to display the
205
+ * full content.
212
206
  */
213
207
  export declare interface AutoHeightTextLayout {
214
208
  type: TextLayout.autoHeight;
@@ -219,11 +213,8 @@ export declare interface AutoHeightTextLayout {
219
213
  }
220
214
 
221
215
  /**
222
- * <InlineAlert slots="text" variant="warning"/>
223
- *
224
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
225
- *
226
- * @experimental
216
+ * Auto-width, aka point text: both width and height are automatically determined based on the content. There is no
217
+ * automatic line wrapping, so the text will all be on one line unless the text contains explicit newlines.
227
218
  */
228
219
  export declare interface AutoWidthTextLayout {
229
220
  type: TextLayout.autoWidth;
@@ -265,10 +256,12 @@ declare interface BaseCharacterStyles {
265
256
  */
266
257
  underline: boolean;
267
258
  /**
268
- * URL for the hyperlink.
269
- * A link can be removed by setting it to undefined
259
+ * A URL hyperlink. Character ranges with a link are underlined *by default*, unless these styles explicitly specify
260
+ * `underline: false`.
261
+ *
262
+ * To remove a link from existing text, explicitly specify `link: ""` in {@link TextContentModel.applyCharacterStyles}.
270
263
  */
271
- link: string | undefined;
264
+ link?: string;
272
265
  /**
273
266
  * Sets a superscript or subscript style.
274
267
  */
@@ -350,11 +343,6 @@ export declare class BaseNode {
350
343
  }
351
344
 
352
345
  /**
353
- * <InlineAlert slots="text" variant="warning"/>
354
- *
355
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
356
- *
357
- * @experimental
358
346
  * BaseParagraphListStyle interface represents common properties shared between ordered and unordered list types.
359
347
  */
360
348
  declare interface BaseParagraphListStyle {
@@ -363,11 +351,6 @@ declare interface BaseParagraphListStyle {
363
351
  }
364
352
 
365
353
  /**
366
- * <InlineAlert slots="text" variant="warning"/>
367
- *
368
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
369
- *
370
- * @experimental
371
354
  * Base paragraph styles that can be applied to an entire paragraph atomically.
372
355
  * Excludes list style settings, which differ between the getter-oriented {@link ParagraphStyles} interface and the
373
356
  * setter-oriented {@link ParagraphStylesRangeInput}.
@@ -394,15 +377,15 @@ declare interface BaseParagraphStyles {
394
377
  * Represents a bitmap image resource. Use {@link Editor.loadBitmapImage} to create a BitmapImage, and then {@link Editor.createImageContainer}
395
378
  * to display it in the document by creating a MediaContainerNode structure.
396
379
  */
397
- export declare interface BitmapImage {
380
+ export declare class BitmapImage {
398
381
  /**
399
382
  * Original width of the bitmap in pixels.
400
383
  */
401
- readonly width: number;
384
+ get width(): number;
402
385
  /**
403
386
  * Original height of the bitmap in pixels.
404
387
  */
405
- readonly height: number;
388
+ get height(): number;
406
389
  }
407
390
 
408
391
  /**
@@ -447,7 +430,8 @@ declare enum BlendMode {
447
430
  hue = 14,
448
431
  saturation = 15,
449
432
  color = 16,
450
- luminosity = 17
433
+ luminosity = 17,
434
+ accumulate = 18
451
435
  }
452
436
 
453
437
  /**
@@ -604,7 +588,8 @@ export declare class Context {
604
588
  */
605
589
  off(eventName: EditorEvent, handlerId: EventHandlerId): void;
606
590
  /**
607
- * @returns the current selection. Nodes that are locked or otherwise non-editable are never included in the selection.
591
+ * @returns the current selection. Nodes that are locked or otherwise non-editable are never included in the regular
592
+ * selection (see {@link selectionIncludingNonEditable} to get any locked nodes the user may have clicked).
608
593
  */
609
594
  get selection(): readonly Node[];
610
595
  /**
@@ -636,6 +621,7 @@ export declare class Context {
636
621
  get insertionParent(): ContainerNode;
637
622
  /**
638
623
  * @returns The currently viewed page.
624
+ * To change the current page, call {@link Viewport.bringIntoView} with an artboard or other content on that page.
639
625
  */
640
626
  get currentPage(): PageNode;
641
627
  }
@@ -787,6 +773,9 @@ export declare class Editor {
787
773
  * Note that the path data will be normalized, and therefore the `path` getter may return a different SVG string from the path creation input.
788
774
  * For example, "M 10 80 Q 52.5 10, 95 80 T 180 80" becomes "M 10 80 C 38.33 33.33 66.67 33.33 95 80...".
789
775
  * Throws if the input is empty or is not legal SVG path syntax.
776
+ *
777
+ * Note: the visual top-left corner of a path may not be its local (0,0) origin point, so it's easiest to position
778
+ * a newly created path using {@link Node.setPositionInParent} rather than setting {@link Node.translation} directly.
790
779
  */
791
780
  createPath(path: string): PathNode;
792
781
  }
@@ -847,8 +836,7 @@ declare class ExpressFonts extends Fonts {}
847
836
 
848
837
  /**
849
838
  * An ExpressRootNode represents the root node of the document's "scenegraph" artwork tree. The root contains a collection
850
- * of {@link pages}. Each page contains one or more artboards, arranged in a timeline sequence. All the visual content of
851
- * the document lies within those artboards.
839
+ * of {@link pages}. Each page contains one or more artboards, which in turn hold all the visual content of the document.
852
840
  *
853
841
  * The parent of ExpressRootNode is undefined, since it is the root of the document tree.
854
842
  */
@@ -938,50 +926,48 @@ export declare class Fonts {
938
926
  export declare const fonts: ExpressFonts;
939
927
 
940
928
  /**
941
- * A GridCellNode represents the MediaContainerNode aspect of a grid cell. Unlike other MediaContainerNodes,
942
- * GridCellNodes cannot be translated or rotated directly. This implementation translates and rotates the
943
- * MediaRectangle child of the GridCellNode when those actions are applied.
929
+ * A GridCellNode represents the media aspect of a grid cell. Unlike MediaContainerNodes, grid cells cannot be
930
+ * translated or rotated directly and can't modify a mask shape. This implementation translates and rotates the
931
+ * media rectangle child when those actions are applied.
944
932
  */
945
- export declare class GridCellNode extends MediaContainerNode {
933
+ export declare class GridCellNode extends Node implements IMediaContainerNode {
946
934
  /**
947
- * <InlineAlert slots="text" variant="warning"/>
948
- *
949
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
950
- *
951
- * @experimental
952
935
  * Always throws as it's not possible to clone a single grid slot.
953
936
  * Use the parent grid container instead.
954
937
  *
955
938
  */
956
- clone(): never;
939
+ cloneInPlace(): never;
940
+ get allChildren(): Readonly<Iterable<Node>>;
941
+ get mediaRectangle(): ImageRectangleNode | UnknownMediaRectangleNode;
942
+ replaceMedia(media: BitmapImage): void;
943
+ get maskShape(): ReadOnlyMask;
957
944
  }
958
945
 
959
946
  /**
960
- * A GridLayoutNode represents a grid layout in the scenegraph. The GridLayoutNode is used to create
961
- * a layout grid that other content can be placed into.
947
+ * A GridLayoutNode represents a grid layout in the scenegraph. Currently, grids contain only images but in the future
948
+ * they may support other types of content as well.
962
949
  *
963
950
  * APIs to create a new grid layout are not yet available.
964
951
  */
965
952
  export declare class GridLayoutNode extends Node implements IRectangularNode {
966
953
  /**
967
- * The Grid's regular children. Does not include rectangles and skips over media constainer nodes to return fill grandchildren.
968
- * Grid Cells are ordered by the y and then x position of their top left corner, i.e. left to right and top to bottom.
969
- * The children cannot be added or removed.
954
+ * The GridLayout's child nodes. Nodes are returned in order sorted by the y and then x position of their top left
955
+ * corner, i.e. left to right and top to bottom. These children cannot be added or removed.
970
956
  */
971
957
  get allChildren(): Readonly<Iterable<GridCellNode>>;
972
958
  /**
973
- * The background fill of the GridLayout.
959
+ * The background fill of the GridLayout. GridLayouts must always have a fill.
974
960
  */
975
961
  set fill(fill: Fill);
976
962
  get fill(): Readonly<Fill>;
977
963
  /**
978
- * The width of the node.
964
+ * The width of the entire GridLayout node.
979
965
  * Must be at least {@link MIN_DIMENSION}.
980
966
  */
981
967
  get width(): number;
982
968
  set width(value: number);
983
969
  /**
984
- * The height of the node.
970
+ * The height of the entire GridLayout node.
985
971
  * Must be at least {@link MIN_DIMENSION}.
986
972
  */
987
973
  get height(): number;
@@ -996,8 +982,8 @@ export declare class GridLayoutNode extends Node implements IRectangularNode {
996
982
  */
997
983
  export declare class GroupNode extends Node implements ContainerNode {
998
984
  /**
999
- * The Group's regular children. Does not include the maskShape if one is present.
1000
- * Use the methods on this ItemList object to get, add, and remove children.
985
+ * The Group's regular children. Does not include the {@link maskShape} if one is present.
986
+ * Use the methods on this ItemList object to get, add, and remove regular children.
1001
987
  */
1002
988
  get children(): ItemList<Node>;
1003
989
  /**
@@ -1040,6 +1026,72 @@ declare interface IFillableNode {
1040
1026
  */
1041
1027
  export declare class ImageRectangleNode extends MediaRectangleNode {}
1042
1028
 
1029
+ /**
1030
+ * Interface for nodes that contain media.
1031
+ */
1032
+ export declare interface IMediaContainerNode {
1033
+ /**
1034
+ * The rectangular node representing the entire, uncropped bounds of the media (e.g. image, GIFs, or video). The media's position and
1035
+ * rotation can be changed, but it cannot be resized yet via this API. Media types other than images will yield an UnknownMediaRectangleNode
1036
+ * object for now.
1037
+ * @privateRemarks
1038
+ * Future: for resizing, see HZ-17885 & HZ-12247; for other media types, see HZ-15896.
1039
+ */
1040
+ get mediaRectangle(): ImageRectangleNode | UnknownMediaRectangleNode;
1041
+ /**
1042
+ * Replace existing media inline. The new media is sized to completely fill the bounds of the existing maskShape; if the
1043
+ * media's aspect ratio differs from the maskShape's, the media will be cropped by the maskShape on either the left/right
1044
+ * or top/bottom edges. Currently only supports images as the new media, but previous media can be of any type.
1045
+ *
1046
+ * @param media - New content to display. Currently must be a {@link BitmapImage}.
1047
+ */
1048
+ replaceMedia(media: BitmapImage): void;
1049
+ /**
1050
+ * A read-only view of the mask shape used for cropping/clipping the media.
1051
+ */
1052
+ get maskShape(): INodeBounds;
1053
+ }
1054
+
1055
+ /**
1056
+ * An interface for the bounds of a {@link Node}.
1057
+ */
1058
+ export declare interface INodeBounds extends IVisualNodeBounds {
1059
+ /**
1060
+ * An axis-aligned box in the parent’s coordinate space encompassing the node’s layout bounds (its
1061
+ * {@link boundsLocal}, as transformed by its position and rotation relative to the parent). If the node has
1062
+ * rotation, the top-left of its boundsLocal box (aligned to its own axes) is not necessarily located at the
1063
+ * top-left of the boundsInParent box (since it's aligned to the parent's axes). This value is well-defined
1064
+ * even for an orphan node with no parent.
1065
+ */
1066
+ get boundsInParent(): Readonly<Rect>;
1067
+ /**
1068
+ * The translation of the node along its parent's axes. This is identical to the translation component of
1069
+ * `transformMatrix`. It is often simpler to set a node's position using `setPositionInParent` than by
1070
+ * setting translation directly.
1071
+ */
1072
+ get translation(): Readonly<Point>;
1073
+ /**
1074
+ * The node's local rotation angle in degrees, relative to its parent's axes. Use `setRotationInParent` to
1075
+ * change rotation by rotating around a defined centerpoint.
1076
+ */
1077
+ get rotation(): number;
1078
+ /**
1079
+ * The node's total rotation angle in degrees, relative to the overall global view of the document – including any
1080
+ * cumulative rotation from the node's parent containers.
1081
+ */
1082
+ get rotationInScreen(): number;
1083
+ /**
1084
+ * The node's transform matrix relative to its parent.
1085
+ */
1086
+ get transformMatrix(): mat2d;
1087
+ /**
1088
+ * Convert the node's {@link boundsLocal} to an axis-aligned bounding box in the coordinate space of the target
1089
+ * node. Both nodes must share the same {@link visualRoot}, but can lie anywhere within that subtree
1090
+ * relative to one another (the target node need not be an ancestor of this node, nor vice versa).
1091
+ */
1092
+ boundsInNode(targetNode: VisualNode): Readonly<Rect>;
1093
+ }
1094
+
1043
1095
  /**
1044
1096
  * Interface for nodes with width and height properties.
1045
1097
  */
@@ -1057,20 +1109,18 @@ declare interface IStrokableNode {
1057
1109
  }
1058
1110
 
1059
1111
  /**
1060
- * ItemList represents an ordered list of API objects, representing items that are all children of the
1061
- * same parent node. (The reverse is not necessarily true, however: this list might not include all
1062
- * children that exist in the parent node. See {@link Node.allChildren} for details).
1112
+ * ItemList represents an ordered list of API objects that are all children of the same parent node. It is most
1113
+ * frequently encountered as {@link ArtboardNode.children} or {@link GroupNode.children}.
1063
1114
  *
1064
1115
  * ItemList also provides APIs for manipulating the list by adding items to the parent or removing items from the parent.
1065
1116
  *
1066
- * This class is used in different places for various types of items, including Nodes, Fills, and Strokes.
1117
+ * Note that some parent nodes may have additional children that are *not* present in the main `children` ItemList
1118
+ * (e.g. {@link GroupNode.maskShape}). Use the read-only {@link Node.allChildren} for a combined view of all children.
1067
1119
  */
1068
1120
  export declare class ItemList<T extends ListItem> extends RestrictedItemList<T> {
1069
1121
  /**
1070
1122
  * Add one or more items to the end of the list. The last argument will become the last item in this list. Items are
1071
1123
  * removed from their previous parent, if any – or if an item is already in *this* list, its index is simply changed.
1072
- *
1073
- * @throws - if item has a different parent and item is a {@link ThreadedTextNode}, or if item's children subtree contains a {@link ThreadedTextNode}.
1074
1124
  */
1075
1125
  append(...items: T[]): void;
1076
1126
  /**
@@ -1081,28 +1131,53 @@ export declare class ItemList<T extends ListItem> extends RestrictedItemList<T>
1081
1131
  * Replace `oldItem` with `newItem` in this list. Throws if `oldItem` is not a member of this list.
1082
1132
  * `newItem` is removed from its previous parent, if any – or if it's already in *this* list, its index is simply
1083
1133
  * changed. No-op if both arguments are the same item.
1084
- *
1085
- * @throws - if newItem has a different parent and newItem is a {@link ThreadedTextNode}, or if newItem's children subtree contains a {@link ThreadedTextNode}.
1086
1134
  */
1087
1135
  replace(oldItem: T, newItem: T): void;
1088
1136
  /**
1089
1137
  * Insert `newItem` so it is immediately before `before` in this list: places `newItem` at the index that `before` used
1090
1138
  * to occupy, shifting `before` and all later items to higher indices. `newItem` is removed from its previous parent,
1091
1139
  * if any – or if it's already in *this* list, its index is simply changed. No-op if both arguments are the same item.
1092
- *
1093
- * @throws - if newItem has a different parent and it is a {@link ThreadedTextNode}, or if newItem's children subtree contains a {@link ThreadedTextNode}.
1094
1140
  */
1095
1141
  insertBefore(newItem: T, before: T): void;
1096
1142
  /**
1097
1143
  * Insert `newItem` so it is immediately after `after` in this list: places `newItem` at the index one higher than `after`,
1098
1144
  * shifting all later items to higher indices (the index of `after` remains unchanged). `newItem` is removed from its previous parent,
1099
1145
  * if any – or if it's already in *this* list, its index is simply changed. No-op if both arguments are the same item.
1100
- *
1101
- * @throws - if newItem has a different parent and it is a {@link ThreadedTextNode}, or if newItem's children subtree contains a {@link ThreadedTextNode}.
1102
1146
  */
1103
1147
  insertAfter(newItem: T, after: T): void;
1104
1148
  }
1105
1149
 
1150
+ /**
1151
+ * An interface for the bounds of a {@link VisualNode}.
1152
+ */
1153
+ export declare interface IVisualNodeBounds {
1154
+ /**
1155
+ * The bounding box of the node, expressed in the node's local coordinate space (which may be shifted or rotated
1156
+ * relative to its parent). Generally matches the selection outline seen in the UI, encompassing the vector path
1157
+ * "spine" of the shape as well as its stroke, but excluding effects such as shadows.
1158
+ *
1159
+ * The top-left corner of the bounding box corresponds to the visual top-left corner of the node, but this value is
1160
+ * *not* necessarily (0,0) – this is especially true for Text and Path nodes.
1161
+ */
1162
+ get boundsLocal(): Readonly<Rect>;
1163
+ /**
1164
+ * Position of the node's centerpoint in its own local coordinate space, i.e. the center of the boundsLocal box.
1165
+ */
1166
+ get centerPointLocal(): Readonly<Point>;
1167
+ /**
1168
+ * Position of the node's top-left corner in its own local coordinate space, equal to (boundsLocal.x,
1169
+ * boundsLocal.y). If the node is rotated, this is not the same as the top-left corner of
1170
+ * boundsInParent.
1171
+ */
1172
+ get topLeftLocal(): Readonly<Point>;
1173
+ /**
1174
+ * Convert a point given in the node’s local coordinate space to a point in the coordinate space of the target node.
1175
+ * Both nodes must share the same {@link visualRoot}, but can lie anywhere within that subtree relative to one
1176
+ * another (the target node need not be an ancestor of this node, nor vice versa).
1177
+ */
1178
+ localPointInNode(localPoint: Point, targetNode: VisualNode): Readonly<Point>;
1179
+ }
1180
+
1106
1181
  /**
1107
1182
  * A LineNode represents a simple vector line in the scenegraph – a single straight-line segment.
1108
1183
  *
@@ -1168,11 +1243,12 @@ export declare class LineNode extends StrokableNode {
1168
1243
  }
1169
1244
 
1170
1245
  /**
1171
- * Base interface for any item that can be used in {@link ItemList}. ItemList is used in different places to hold various
1172
- * types of items, including Nodes, Fills, and Strokes.
1246
+ * Base interface for any item that can be stored in an {@link ItemList} (typically a {@link Node} type).
1173
1247
  */
1174
1248
  export declare interface ListItem {}
1175
1249
 
1250
+ declare type ListStyleInput = OrderedListStyleInput | UnorderedListStyleInput | RemoveListStyleInput;
1251
+
1176
1252
  /**
1177
1253
  * A MediaContainerNode is a multi-node construct that displays media (such as images or video) with optional cropping and
1178
1254
  * clipping to a shape mask. The underlying media asset is always rectangular, but the final appearance of this node is
@@ -1181,12 +1257,7 @@ export declare interface ListItem {}
1181
1257
  * To create new media container for a bitmap image, see {@link Editor.createImageContainer}. APIs for creating a
1182
1258
  * container with other content, such as videos, are not yet available.
1183
1259
  */
1184
- export declare class MediaContainerNode extends Node {
1185
- /**
1186
- * The rectangular node representing the entire, uncropped bounds of the media (e.g. image, GIFs, or video). The media's position and
1187
- * rotation can be changed, but it cannot be resized yet via this API. Media types other than images will yield an UnknownMediaRectangleNode
1188
- * object for now.
1189
- */
1260
+ export declare class MediaContainerNode extends Node implements IMediaContainerNode {
1190
1261
  get mediaRectangle(): ImageRectangleNode | UnknownMediaRectangleNode;
1191
1262
  /**
1192
1263
  * The mask used for cropping/clipping the media. The bounds of this shape are entire visible bounds of the container.
@@ -1194,13 +1265,6 @@ export declare class MediaContainerNode extends Node {
1194
1265
  * different shape via this API.
1195
1266
  */
1196
1267
  get maskShape(): FillableNode;
1197
- /**
1198
- * Replace existing media inline. The new media is sized to completely fill the bounds of the existing maskShape; if the
1199
- * media's aspect ratio differs from the maskShape's, the media will be cropped by the maskShape on either the left/right
1200
- * or top/bottom edges. Currently only supports images as the new media, but previous media can be of any type.
1201
- *
1202
- * @param media - New content to display. Currently must be a {@link BitmapImage}.
1203
- */
1204
1268
  replaceMedia(media: BitmapImage): void;
1205
1269
  }
1206
1270
 
@@ -1214,6 +1278,7 @@ export declare abstract class MediaRectangleNode extends Node implements Readonl
1214
1278
  /**
1215
1279
  * Get {@link AddOnData} reference for managing private metadata attached to the media resource displayed by this node.
1216
1280
  * The same media resource may be reused in multiple places in the document, and all share the same AddOnData state.
1281
+ * Note: This support is not present for PSD/AI assets. An error will be thrown in that case.
1217
1282
  */
1218
1283
  get mediaAddOnData(): AddOnData;
1219
1284
  /**
@@ -1229,16 +1294,11 @@ export declare abstract class MediaRectangleNode extends Node implements Readonl
1229
1294
  */
1230
1295
  get height(): number;
1231
1296
  /**
1232
- * <InlineAlert slots="text" variant="warning"/>
1233
- *
1234
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1235
- *
1236
- * @experimental
1237
1297
  * Always throws as it's not possible to clone just the media rectangle alone.
1238
1298
  * Clone the entire parent MediaContainerNode instead.
1239
1299
  *
1240
1300
  */
1241
- clone(): never;
1301
+ cloneInPlace(): never;
1242
1302
  }
1243
1303
 
1244
1304
  /**
@@ -1247,9 +1307,9 @@ export declare abstract class MediaRectangleNode extends Node implements Readonl
1247
1307
  * minimal VisualNode or BaseNode. As a general rule, if you can click or drag an object with the select/move
1248
1308
  * tool in the UI, then it extends from Node.
1249
1309
  *
1250
- * A Node’s parent is always a VisualContentNode but may not be another Node (e.g. if the parent is an ArtboardNode)
1310
+ * A Node’s parent is always a {@link VisualNode}, but it might not be another Node (e.g. if the parent is an ArtboardNode).
1251
1311
  */
1252
- declare class Node extends VisualNode {
1312
+ declare class Node extends VisualNode implements INodeBounds {
1253
1313
  /**
1254
1314
  * Returns a read-only list of all children of the node. General-purpose content containers such as ArtboardNode or
1255
1315
  * GroupNode also provide a mutable {@link ContainerNode.children} list. Other nodes with a more specific structure can
@@ -1259,25 +1319,8 @@ declare class Node extends VisualNode {
1259
1319
  * The children of a Node are always other Node classes (never the more minimal BaseNode).
1260
1320
  */
1261
1321
  get allChildren(): Readonly<Iterable<Node>>;
1262
- /**
1263
- * An axis-aligned box in the parent’s coordinate space encompassing the node’s layout bounds (its
1264
- * {@link boundsLocal}, as transformed by its position and rotation relative to the parent). If the node has
1265
- * rotation, the top-left of its boundsLocal box (aligned to its own axes) is not necessarily located at the
1266
- * top-left of the boundsInParent box (since it's aligned to the parent's axes). This value is well-defined
1267
- * even for an orphan node with no parent.
1268
- */
1269
1322
  get boundsInParent(): Readonly<Rect>;
1270
- /**
1271
- * Convert the node's {@link boundsLocal} to an axis-aligned bounding box in the coordinate space of the target
1272
- * node. Both nodes must share the same {@link visualRoot}, but can lie anywhere within that subtree
1273
- * relative to one another (the target node need not be an ancestor of this node, nor vice versa).
1274
- */
1275
1323
  boundsInNode(targetNode: VisualNode): Readonly<Rect>;
1276
- /**
1277
- * The translation of the node along its parent's axes. This is identical to the translation component of
1278
- * `transformMatrix`. It is often simpler to set a node's position using `setPositionInParent` than by
1279
- * setting translation directly.
1280
- */
1281
1324
  get translation(): Readonly<Point>;
1282
1325
  set translation(value: Point);
1283
1326
  /**
@@ -1295,10 +1338,6 @@ declare class Node extends VisualNode {
1295
1338
  * ```
1296
1339
  */
1297
1340
  setPositionInParent(parentPoint: Point, localRegistrationPoint: Point): void;
1298
- /**
1299
- * The node's local rotation angle in degrees, relative to its parent's axes. Use `setRotationInParent` to
1300
- * change rotation by rotating around a defined centerpoint.
1301
- */
1302
1341
  get rotation(): number;
1303
1342
  /**
1304
1343
  * Set the node’s rotation angle relative to its parent to exactly the given value, keeping the given point in the
@@ -1310,29 +1349,23 @@ declare class Node extends VisualNode {
1310
1349
  * @example
1311
1350
  * Rotate the rectangle 45 degrees clockwise around its centerpoint:
1312
1351
  * ```
1313
- * rectangle.setRotationInParent(45, { x: rectangle.width / 2, y: rectangle.height / 2 });
1352
+ * rectangle.setRotationInParent(45, rectangle.centerPointLocal);
1314
1353
  * ```
1315
1354
  */
1316
1355
  setRotationInParent(angleInDegrees: number, localRotationPoint: Point): void;
1317
- /**
1318
- * The node's total rotation angle in degrees, relative to the overall global view of the document – including any
1319
- * cumulative rotation from the node's parent containers.
1320
- */
1321
1356
  get rotationInScreen(): number;
1322
1357
  /**
1323
1358
  * The node's opacity, from 0.0 to 1.0
1324
1359
  */
1325
1360
  get opacity(): number;
1326
1361
  set opacity(opacity: number);
1327
- /**
1328
- * The node's transform matrix relative to its parent.
1329
- */
1330
1362
  get transformMatrix(): mat2d;
1331
1363
  /**
1332
1364
  * The node's lock/unlock state. Locked nodes are excluded from the selection (see {@link Context.selection}), and
1333
- * cannot be edited by the user in the UI unless they are unlocked first. Operations on locked nodes using the API
1334
- * are permitted. However, please consider if modifying a locked node would align with user expectations
1335
- * before using the API to make changes to locked nodes.
1365
+ * cannot be edited by the user in the UI unless they are unlocked first. It is still possible to mutate locked nodes
1366
+ * at the model level using these APIs. However, please consider if modifying a locked node would align with user
1367
+ * expectations before doing so.
1368
+ *
1336
1369
  */
1337
1370
  get locked(): boolean;
1338
1371
  set locked(locked: boolean);
@@ -1348,7 +1381,15 @@ declare class Node extends VisualNode {
1348
1381
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1349
1382
  *
1350
1383
  * @experimental
1351
- * Changes the width to the given value and the height to the given width multiplied by the aspect ratio.
1384
+ * Changes the width to the given value by visually *scaling* the entire content larger or smaller on both axes to
1385
+ * preserve its existing aspect ratio, keeping its top-left corner ({@link topLeftLocal}) at a fixed location.
1386
+ *
1387
+ * Scaling changes the size of visual styling elements such as stroke width, corner detailing, and font size.
1388
+ * Contrast this to *resizing* operations (such as {@link resizeToFitWithin}), which adjust the bounding box of an
1389
+ * element while trying to preserve the existing size of visual detailing such as strokes, corners, and fonts.
1390
+ *
1391
+ * Rescaling becomes baked into the updated values of fields such as stroke weight, rectangle width, etc. (it is not
1392
+ * a separate, persistent scale factor multiplier).
1352
1393
  */
1353
1394
  rescaleProportionalToWidth(width: number): void;
1354
1395
  /**
@@ -1357,7 +1398,8 @@ declare class Node extends VisualNode {
1357
1398
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1358
1399
  *
1359
1400
  * @experimental
1360
- * Changes the height to the given value and the width to the given height multiplied by the aspect ratio.
1401
+ * Changes the height to the given value by visually *scaling* the entire content larger or smaller on both axes to
1402
+ * preserve its existing aspect ratio. See {@link rescaleProportionalToWidth} documentation for additional explanation.
1361
1403
  */
1362
1404
  rescaleProportionalToHeight(height: number): void;
1363
1405
  /**
@@ -1366,9 +1408,17 @@ declare class Node extends VisualNode {
1366
1408
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1367
1409
  *
1368
1410
  * @experimental
1369
- * Resizes the node to fit within a box with the given dimensions.
1411
+ * Resizes the node to fit entirely *within* a box of the given dimensions, keeping its top-left corner ({@link topLeftLocal})
1412
+ * at a fixed location. Nodes with a fixed aspect ratio may leave unused space on one axis as a result, but nodes
1413
+ * with flexible aspect ratio will be resized to the exact box size specified.
1370
1414
  *
1371
- * If the node doesn't have a fixed aspect ratio then this will resize the node to the given width and height.
1415
+ * Resizing attempts to preserve the existing size of visual styling elements such as stroke width, corner detailing,
1416
+ * and font size as much as possible. Contrast with *rescaling* (such as {@link rescaleProportionalToWidth}), which
1417
+ * always changes the size of visual detailing in exact proportion to the change in overall bounding box size. This
1418
+ * API may still produce *some* degree of rescaling if necessary for certain shapes with fixed corner/edge detailing
1419
+ * to fit the box better.
1420
+ *
1421
+ * @see resizeToCover
1372
1422
  */
1373
1423
  resizeToFitWithin(width: number, height: number): void;
1374
1424
  /**
@@ -1377,29 +1427,25 @@ declare class Node extends VisualNode {
1377
1427
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1378
1428
  *
1379
1429
  * @experimental
1380
- * Resizes the node to cover a box with the given dimensions.
1430
+ * Resizes the node to completely *cover* a box of the given dimensions, keeping its top-left corner ({@link topLeftLocal})
1431
+ * at a fixed location. Nodes with a fixed aspect ratio may extend outside the box on one axis as a result, but
1432
+ * nodes with flexible aspect ratio will be resized to the exact box size specified. See {@link resizeToFitWithin}
1433
+ * documentation for additional explanation.
1381
1434
  *
1382
- * If the node doesn't have a fixed aspect ratio then this will resize the node to the given width and height.
1435
+ * @see resizeToFitWithin
1383
1436
  */
1384
1437
  resizeToCover(width: number, height: number): void;
1385
1438
  /**
1386
- * <InlineAlert slots="text" variant="warning"/>
1439
+ * Creates a copy of this node and its entire subtree of descendants.
1387
1440
  *
1388
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1441
+ * The node must be attached to a page as the copy will be added as a sibling.
1389
1442
  *
1390
- * @experimental
1391
- * Creates an orphaned copy of this node, including all persistent attributes and descendants.
1392
1443
  */
1393
- clone(): typeof this;
1444
+ cloneInPlace(): typeof this;
1394
1445
  }
1395
1446
  export { Node as Node };
1396
1447
 
1397
1448
  /**
1398
- * <InlineAlert slots="text" variant="warning"/>
1399
- *
1400
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1401
- *
1402
- * @experimental
1403
1449
  * Numbering types used to display ordered lists: 1, A, a, I, i 01, 001.
1404
1450
  */
1405
1451
  export declare enum OrderedListNumbering {
@@ -1413,28 +1459,18 @@ export declare enum OrderedListNumbering {
1413
1459
  }
1414
1460
 
1415
1461
  /**
1416
- * <InlineAlert slots="text" variant="warning"/>
1417
- *
1418
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1419
- *
1420
- * @experimental
1421
1462
  * OrderedListStyle represents the style of an ordered list.
1422
1463
  */
1423
1464
  export declare type OrderedListStyle = Required<OrderedListStyleInput>;
1424
1465
 
1425
1466
  /**
1426
- * <InlineAlert slots="text" variant="warning"/>
1427
- *
1428
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1429
- *
1430
- * @experimental
1431
1467
  * Interface for specifying an ordered list style, such as a numbered list.
1432
1468
  */
1433
1469
  export declare interface OrderedListStyleInput extends BaseParagraphListStyle {
1434
1470
  type: ParagraphListType.ordered;
1435
1471
  /**
1436
1472
  * The numbering style to use. If undefined, it defaults to a different type depending on the paragraph's indent level.
1437
- * The defaults for increasing indent are 1, a, i, I, and then they repeat.
1473
+ * The defaults for increasing indent are: 1, a, i, I, and then they repeat.
1438
1474
  * These markers and the prefix/postfix strings (if any) are displayed using the same font as the start of the
1439
1475
  * paragraph's text content.
1440
1476
  */
@@ -1466,14 +1502,15 @@ export declare class PageList extends RestrictedItemList<PageNode> {
1466
1502
 
1467
1503
  /**
1468
1504
  * A PageNode represents a page in the document, a child of the root node of the document's "scenegraph" artwork tree
1469
- * (see {@link ExpressRootNode}). A page contains one or more artboards, representing "scenes" in a linear timeline
1470
- * sequence. Those artboards, in turn, contain all the visual content of the document.
1505
+ * (see {@link ExpressRootNode}). A page contains one or more artboards, which in turn contain all the page's visual
1506
+ * content. If multiple artboards are present, each represents a keyframe "scene" in the page's animation timeline.
1471
1507
  *
1472
1508
  * To create new pages, see {@link PageList.addPage}.
1473
1509
  */
1474
1510
  export declare class PageNode extends BaseNode implements IRectangularNode {
1475
1511
  /**
1476
- * The artboards or "scenes" of a page, ordered by timeline sequence.
1512
+ * The artboards or "scenes," which hold the page's visual contents. If multiple artboards are present, this list
1513
+ * represents an ordered keyframe sequence in the page's animation timeline.
1477
1514
  * To create new artboards, see {@link ArtboardList.addArtboard}.
1478
1515
  */
1479
1516
  get artboards(): ArtboardList;
@@ -1524,24 +1561,15 @@ export declare class PageNode extends BaseNode implements IRectangularNode {
1524
1561
  }
1525
1562
 
1526
1563
  /**
1527
- * <InlineAlert slots="text" variant="warning"/>
1528
- *
1529
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1530
- *
1531
- * @experimental
1532
1564
  * Indicates list type: see {@link UnorderedListStyleInput} and {@link OrderedListStyleInput}.
1533
1565
  */
1534
1566
  export declare enum ParagraphListType {
1535
- unordered = 0,
1536
- ordered = 1
1567
+ none = 0,
1568
+ unordered = 1,
1569
+ ordered = 2
1537
1570
  }
1538
1571
 
1539
1572
  /**
1540
- * <InlineAlert slots="text" variant="warning"/>
1541
- *
1542
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1543
- *
1544
- * @experimental
1545
1573
  * Text styles that must be applied to an entire paragraph atomically. (Contrast with CharacterStyles which can be applied to
1546
1574
  * any range of characters, even a short span like one single word).
1547
1575
  */
@@ -1550,39 +1578,23 @@ export declare interface ParagraphStyles extends BaseParagraphStyles {
1550
1578
  }
1551
1579
 
1552
1580
  /**
1553
- * <InlineAlert slots="text" variant="warning"/>
1554
- *
1555
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1556
- *
1557
- * @experimental
1558
- * The variant of {@link ParagraphStyles} with all optional style fields is used to apply ParagraphStyles(). When using that API,
1581
+ * A variant of {@link ParagraphStyles} with all style fields optional, used for applyParagraphStyles(). When using that API,
1559
1582
  * any fields not specified are left unchanged, preserving the text's existing styles.
1560
1583
  */
1561
1584
  export declare interface ParagraphStylesInput extends Partial<BaseParagraphStyles> {
1562
- list?: OrderedListStyleInput | UnorderedListStyleInput;
1585
+ list?: ListStyleInput;
1563
1586
  }
1564
1587
 
1565
1588
  /**
1566
- * <InlineAlert slots="text" variant="warning"/>
1567
- *
1568
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1569
- *
1570
- * @experimental
1571
- * A set of {@link ParagraphStyles} and the text range they apply to. It is seen in the paragraphStyleRanges getter.
1589
+ * A set of {@link ParagraphStyles} along with the text range they apply to. Returned by the paragraphStyleRanges getter.
1572
1590
  */
1573
1591
  export declare interface ParagraphStylesRange extends ParagraphStyles, StyleRange {}
1574
1592
 
1575
1593
  /**
1576
- * <InlineAlert slots="text" variant="warning"/>
1577
- *
1578
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1579
- *
1580
- * @experimental
1581
- * A variant of {@link ParagraphStylesRange} with all style fields optional and the text range they apply to. Used for the
1594
+ * A variant of {@link ParagraphStylesRange} with all style fields optional, along with the text range they apply to. Used for the
1582
1595
  * paragraphStyleRanges setter. When invoking the setter, any fields not specified are reset to their defaults.
1583
1596
  *
1584
- * Paragraphs are separated by newline characters (`\n`). The ranges specified here should align with
1585
- * those boundaries.
1597
+ * Paragraphs are separated by newline characters (`\n`). Ranges specified here should align with those boundaries.
1586
1598
  */
1587
1599
  export declare interface ParagraphStylesRangeInput extends ParagraphStylesInput, StyleRange {}
1588
1600
 
@@ -1591,6 +1603,9 @@ export declare interface ParagraphStylesRangeInput extends ParagraphStylesInput,
1591
1603
  * yet, only read.
1592
1604
  *
1593
1605
  * To create new paths, see {@link Editor.createPath}.
1606
+ *
1607
+ * Note: the visual top-left corner of a path may not be its local (0,0) origin point, so it's easiest to position
1608
+ * a path using {@link Node.setPositionInParent} rather than setting its {@link Node.translation} directly.
1594
1609
  */
1595
1610
  export declare class PathNode extends FillableNode {
1596
1611
  /**
@@ -1616,11 +1631,10 @@ export declare interface Point {
1616
1631
  }
1617
1632
 
1618
1633
  /**
1619
- * ReadOnlyItemList represents an ordered list of API objects, representing items that are all children of the
1620
- * same parent node. (The reverse is not necessarily true, however: this list might not include all
1621
- * children that exist in the parent node. See {@link Node.allChildren} for details).
1634
+ * ReadOnlyItemList represents an ordered list of API objects that are all children of the same parent node.
1622
1635
  *
1623
- * Items in a bare ReadOnlyItemList cannot be added, removed, or reordered. Subclasses like ItemList may add these capabilities, however.
1636
+ * Items in a bare ReadOnlyItemList cannot be added, removed, or reordered. The {@link ItemList} subclass adds more
1637
+ * capabilities, and is most frequently encountered as {@link ArtboardNode.children} or {@link GroupNode.children}.
1624
1638
  */
1625
1639
  export declare class ReadOnlyItemList<T extends ListItem> {
1626
1640
  /**
@@ -1655,6 +1669,26 @@ export declare class ReadOnlyItemList<T extends ListItem> {
1655
1669
  toArray(): readonly T[];
1656
1670
  }
1657
1671
 
1672
+ /**
1673
+ * A read-only view of a mask shape.
1674
+ */
1675
+ export declare class ReadOnlyMask implements INodeBounds {
1676
+ /**
1677
+ * The type of {@link ReadOnlyMask}.
1678
+ */
1679
+ get type(): "ReadOnlyMask";
1680
+ get boundsLocal(): Readonly<Rect>;
1681
+ get centerPointLocal(): Readonly<Point>;
1682
+ get topLeftLocal(): Readonly<Point>;
1683
+ localPointInNode(localPoint: Point, targetNode: VisualNode): Readonly<Point>;
1684
+ get boundsInParent(): Readonly<Rect>;
1685
+ boundsInNode(targetNode: VisualNode): Readonly<Rect>;
1686
+ get translation(): Readonly<Point>;
1687
+ get rotation(): number;
1688
+ get rotationInScreen(): number;
1689
+ get transformMatrix(): mat2d;
1690
+ }
1691
+
1658
1692
  export declare interface Rect {
1659
1693
  x: number;
1660
1694
  y: number;
@@ -1737,9 +1771,15 @@ export declare class RectangleNode extends FillableNode implements IRectangularN
1737
1771
  }
1738
1772
 
1739
1773
  /**
1740
- * Base for ItemLists that have restricted behavior on how items are added to the list,
1741
- * but allow items to be removed and reordered. Subclasses like ItemList may add more
1742
- * capabilities, however.
1774
+ * Interface for removing a list style.
1775
+ */
1776
+ declare interface RemoveListStyleInput extends BaseParagraphListStyle {
1777
+ type: ParagraphListType.none;
1778
+ }
1779
+
1780
+ /**
1781
+ * Base for ItemLists that restrict how items are added to the list, but freely allow items to be removed and
1782
+ * reordered. The {@link ItemList} subclass adds more capabilities, however.
1743
1783
  */
1744
1784
  declare class RestrictedItemList<T extends ListItem> extends ReadOnlyItemList<T> {
1745
1785
  /**
@@ -1863,26 +1903,22 @@ export declare type SolidColorStrokeWithOptionalType = Omit<SolidColorStroke, "t
1863
1903
  Partial<Pick<SolidColorStroke, "type">>;
1864
1904
 
1865
1905
  /**
1866
- * A StandaloneTextNode represents a text display frame in the scenegraph. It displays an entire piece of text.
1906
+ * A StandaloneTextNode represents text that is displayed *entirely* within one single frame in the scenegraph (in
1907
+ * contrast to {@link ThreadedTextNode}, where text may flow across several separate display "frames").
1867
1908
  * The StandaloneTextNode does not directly hold the text content and styles – instead it refers to a {@link TextNodeContentModel}.
1868
1909
  *
1869
- * To create new a single-frame piece of text, see {@link Editor.createText}.
1910
+ * To create a new StandaloneTextNode, see {@link Editor.createText}.
1870
1911
  */
1871
1912
  export declare class StandaloneTextNode extends TextNode {
1872
1913
  get nextTextNode(): undefined;
1873
1914
  get layout(): Readonly<AutoWidthTextLayout | AutoHeightTextLayout | UnsupportedTextLayout>;
1874
1915
  /**
1875
- * <InlineAlert slots="text" variant="warning"/>
1876
- *
1877
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
1916
+ * Sets the layout mode of this TextNode "frame" which the text content is displayed within.
1917
+ * {@link AreaTextLayout} is not supported by standalone text.
1878
1918
  *
1879
- * @experimental
1880
- * Sets the layout mode of the TextNode "frame."
1881
- *
1882
- * {@link AreaTextLayout} is not supported by single-frame text.
1883
- *
1884
- * @throws if changing text layout to/from {@link TextLayout.magicFit} or {@link TextLayout.circular} layout when the text contains font(s) unavailable to the current user.
1885
- * @throws if {@link StandaloneTextNode} is not a part of a multi-frame text content flow and the layout is {@link AreaTextLayout}.
1919
+ * @throws if changing text layout to/from {@link TextLayout.magicFit} or {@link TextLayout.circular}
1920
+ * layout when the text contains fonts that are unavailable to the current user, because these layouts change
1921
+ * capitalization and thus alter which glyphs are displayed.
1886
1922
  */
1887
1923
  set layout(layout: AutoWidthTextLayout | AutoHeightTextLayout);
1888
1924
  }
@@ -1995,35 +2031,96 @@ export declare abstract class TextContentModel {
1995
2031
  get id(): string;
1996
2032
  /**
1997
2033
  * The complete text string, which may span multiple {@link ThreadedTextNode} "frames" in the scenegraph.
2034
+ * @throws The setter throws if the existing text contains fonts unavailable to the current user.
2035
+ * See {@link hasUnavailableFonts}.
1998
2036
  */
1999
2037
  get text(): string;
2000
2038
  set text(textContent: string);
2001
2039
  /**
2002
- * The character styles are applied to different ranges of this text content. When setting character styles, any style
2003
- * properties that are not provided are reset to their defaults (contrast to {@link applyCharacterStyles} which
2004
- * preserves the text's existing styles for any fields not specified). When *getting* styles, all fields are always
2005
- * provided.
2040
+ * <InlineAlert slots="text" variant="warning"/>
2006
2041
  *
2007
- * Note: existing fonts used in the document, returned by this getter, are not guaranteed to be ones the current user
2008
- * has rights to edit with. The *setter* only accepts the AvailableFont type which has been verified to be usable.
2042
+ * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2043
+ *
2044
+ * @experimental
2045
+ * Appends a new text string to the end of the text content.
2046
+ *
2047
+ * @param newText - The text to append.
2048
+ * @throws if the existing text contains fonts unavailable to the current user. See {@link hasUnavailableFonts}.
2009
2049
  */
2010
- get characterStyleRanges(): readonly CharacterStylesRange[];
2011
- set characterStyleRanges(styles: readonly CharacterStylesRangeInput[]);
2050
+ appendText(newText: string): void;
2012
2051
  /**
2013
2052
  * <InlineAlert slots="text" variant="warning"/>
2014
2053
  *
2015
2054
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2016
2055
  *
2017
2056
  * @experimental
2018
- * The styles applied to different paragraphs of this text content.
2057
+ * Inserts a new text string into the text content at the specified index.
2058
+ *
2059
+ * @param newText - The text to insert.
2060
+ * @param index - The index at which to insert the new text.
2061
+ * @param style - Style to use for the new text: either directly provides a style to use, or indicates which
2062
+ * existing text to match the style of. Default: `beforeInsertionPoint`.
2063
+ * @throws if the existing text contains fonts unavailable to the current user. See {@link hasUnavailableFonts}.
2019
2064
  */
2020
- get paragraphStyleRanges(): readonly ParagraphStylesRange[];
2065
+ insertText(
2066
+ newText: string,
2067
+ index: number,
2068
+ style?: CharacterStylesInput | TextStyleSource.beforeInsertionPoint | TextStyleSource.afterInsertionPoint
2069
+ ): void;
2021
2070
  /**
2022
2071
  * <InlineAlert slots="text" variant="warning"/>
2023
2072
  *
2024
2073
  * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2025
2074
  *
2026
2075
  * @experimental
2076
+ * Replaces a range of text with a new text string.
2077
+ *
2078
+ * @param newText - The text to replace the range with.
2079
+ * @param replaceRange - The range of text to replace.
2080
+ * @param style - Style to use for the new text: either directly provides a style to use, or indicates which
2081
+ * existing text to match the style of. Default: `firstReplacedCharacter`.
2082
+ * @throws if the existing text contains fonts unavailable to the current user. See {@link hasUnavailableFonts}.
2083
+ */
2084
+ replaceText(
2085
+ newText: string,
2086
+ replaceRange: TextRange,
2087
+ style?:
2088
+ | CharacterStylesInput
2089
+ | TextStyleSource.beforeInsertionPoint
2090
+ | TextStyleSource.afterInsertionPoint
2091
+ | TextStyleSource.firstReplacedCharacter
2092
+ ): void;
2093
+ /**
2094
+ * <InlineAlert slots="text" variant="warning"/>
2095
+ *
2096
+ * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2097
+ *
2098
+ * @experimental
2099
+ * Deletes a range of text from the content.
2100
+ *
2101
+ * @param range - The range of text to delete.
2102
+ * @throws if the existing text contains fonts unavailable to the current user. See {@link hasUnavailableFonts}.
2103
+ */
2104
+ deleteText(range: TextRange): void;
2105
+ /**
2106
+ * The character styles that are applied to different ranges of this text content. Each range starts immediately after
2107
+ * the previous one: they are always contiguous, and never overlap.
2108
+ *
2109
+ * When *setting* character styles, any style properties that are not provided are reset to their defaults (contrast to
2110
+ * {@link applyCharacterStyles} which preserves the text's existing styles for any fields not specified). If the ranges
2111
+ * do not cover the full length of the text, the last range is extended to cover all the remaining text.
2112
+ * When *getting* styles, all fields are always provided.
2113
+ *
2114
+ * Note: existing fonts used in the document, returned by this getter, are not guaranteed to be ones the current user
2115
+ * has rights to edit with. The *setter* only accepts the AvailableFont type which has been verified to be usable.
2116
+ */
2117
+ get characterStyleRanges(): readonly CharacterStylesRange[];
2118
+ set characterStyleRanges(styles: readonly CharacterStylesRangeInput[]);
2119
+ /**
2120
+ * The styles applied to different paragraphs of this text content.
2121
+ */
2122
+ get paragraphStyleRanges(): readonly ParagraphStylesRange[];
2123
+ /**
2027
2124
  * Apply styles to different paragraphs of this text content. Any style properties that are not provided are reset to their defaults.
2028
2125
  * When **getting** styles, all properties are always provided.
2029
2126
  *
@@ -2031,7 +2128,7 @@ export declare abstract class TextContentModel {
2031
2128
  * those boundaries. If multiple ranges provided overlap a single paragraph, the first one to overlap is applied to the
2032
2129
  * entire paragraph.
2033
2130
  *
2034
- * @throws if the text content contains fonts unavailable to the current user and an ordered-list style is being applied.
2131
+ * @throws if applying an ordered-list style when the text contains fonts that are unavailable to the current user.
2035
2132
  */
2036
2133
  set paragraphStyleRanges(styles: readonly ParagraphStylesRangeInput[]);
2037
2134
  /**
@@ -2039,28 +2136,27 @@ export declare abstract class TextContentModel {
2039
2136
  * unchanged. Does not modify any styles in the text outside this range. Contrast to the {@link characterStyleRanges}
2040
2137
  * setter, which specifies new style range(s) for the entire text at once, and resets any unspecified properties back to
2041
2138
  * default styles.
2042
-
2139
+ *
2140
+ * Explicitly specifying `link: ""` will remove any hyperlinks present in the existing text. If the `link` style
2141
+ * property is not specified at all, existing links are preserved.
2142
+ *
2043
2143
  * @param styles - The styles to apply.
2044
- * @param range -The start and length of the character sequence to which the styles should be applied.
2045
- * The styles will be applied to the entire text content flow if not specified.
2046
- * If the specified range doesn't align well with the paragraph boundaries, the range will be expanded to cover the
2047
- * entire paragraphs, it overlaps.
2144
+ * @param range - The start and length of the character sequence to which the styles should be applied.
2145
+ * If no range is specified, styles will be applied to the entire text content flow.
2048
2146
  */
2049
2147
  applyCharacterStyles(styles: CharacterStylesInput, range?: TextRange): void;
2050
2148
  /**
2051
- * <InlineAlert slots="text" variant="warning"/>
2052
- *
2053
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2054
- *
2055
- * @experimental
2056
2149
  * Apply one or more styles to the paragraphs in the given range, leaving any style properties that were not specified
2057
2150
  * unchanged. Does not modify any styles in the text outside this range. Contrast to the {@link paragraphStyleRanges}
2058
2151
  * setter, which specifies new style range(s) for the entire text at once, and resets any unspecified properties back to
2059
2152
  * default styles.
2060
-
2153
+ *
2061
2154
  * @param styles - The styles to apply.
2062
- * @param range - The start and length of character sequence to which the styles should be applied.
2063
- * If not specified the styles will be applied to the entire piece of text content flow.
2155
+ * @param range - The start and length of character sequence to which the styles should be applied. Styles apply to any
2156
+ * paragraphs that even partially overlap this range.
2157
+ * If range is not specified, the styles will be applied to the entire text content flow.
2158
+ *
2159
+ * @throws if applying an ordered-list style when the text contains fonts that are unavailable to the current user.
2064
2160
  */
2065
2161
  applyParagraphStyles(styles: ParagraphStylesInput, range?: TextRange): void;
2066
2162
  /**
@@ -2116,9 +2212,12 @@ declare enum TextLayout {
2116
2212
 
2117
2213
  /**
2118
2214
  * TextNode is an abstract base class representing text displayed in the scenegraph, regardless of whether it's a fully
2119
- * self-contained {@link StandaloneTextNode} or one {@link ThreadedTextNode} "frame" of multiple in a larger flow. The
2215
+ * self-contained {@link StandaloneTextNode} or one of multiple {@link ThreadedTextNode} "frames" in a larger flow. The
2120
2216
  * APIs on TextNode and its {@link TextNodeContentModel} allow you to generically work with text without needing to know
2121
- * which of those subtypes you are dealing with.
2217
+ * which subtype you are dealing with.
2218
+ *
2219
+ * Note: the visual top-left corner of text is not located at its local (0,0) origin point, so it's easiest to position
2220
+ * text using {@link Node.setPositionInParent} rather than setting its {@link Node.translation} directly.
2122
2221
  */
2123
2222
  export declare abstract class TextNode extends Node {
2124
2223
  /**
@@ -2128,6 +2227,9 @@ export declare abstract class TextNode extends Node {
2128
2227
  * Note: The bounding box of the orphaned TextNode may be different from the bounding box of the node placed on a
2129
2228
  * page. It is recommended to use this property only when the node is placed on a page.
2130
2229
  *
2230
+ * Note: the visual top-left corner of this box is usually not (0,0). Always use `boundsLocal` or {@link topLeftLocal}
2231
+ * instead of assuming (0,0).
2232
+ *
2131
2233
  */
2132
2234
  get boundsLocal(): Readonly<Rect>;
2133
2235
  /**
@@ -2146,6 +2248,8 @@ export declare abstract class TextNode extends Node {
2146
2248
  * Note: The top-left of the orphaned TextNode may be different from the top-left of the node placed on a
2147
2249
  * page. It is recommended to use this property only when the node is placed on a page.
2148
2250
  *
2251
+ * Note: this value is usually not (0,0) due to the way text layout is defined.
2252
+ *
2149
2253
  */
2150
2254
  get topLeftLocal(): Readonly<Point>;
2151
2255
  /**
@@ -2215,11 +2319,6 @@ export declare abstract class TextNode extends Node {
2215
2319
  */
2216
2320
  get visualEffects(): readonly VisualEffectType[];
2217
2321
  /**
2218
- * <InlineAlert slots="text" variant="warning"/>
2219
- *
2220
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2221
- *
2222
- * @experimental
2223
2322
  * @returns The layout mode of the TextNode "frame."
2224
2323
  */
2225
2324
  get layout(): Readonly<AutoWidthTextLayout | AutoHeightTextLayout | AreaTextLayout | UnsupportedTextLayout>;
@@ -2232,19 +2331,21 @@ export declare abstract class TextNode extends Node {
2232
2331
  */
2233
2332
  export declare class TextNodeContentModel extends TextContentModel {
2234
2333
  /**
2235
- * Get ordered list of all {@link TextNode}s that display this text content in the scenegraph. The text content
2236
- * starts in the first {@link ThreadedTextNode} "frame", and then flows into the second node once it has filled the first one. The ending of the
2237
- * text content may not be visible at all, if the last {@link ThreadedTextNode} "frame" is not large enough to accommodate it.
2334
+ * Get ordered list of all {@link TextNode}s that display this text content in the scenegraph. This might be a single
2335
+ * {@link StandaloneTextNode} *or* a list of one or more {@link ThreadedTextNode}s. In the case of threaded text, the
2336
+ * text content starts in the first {@link ThreadedTextNode} "frame", and then flows into the second node once it has
2337
+ * filled the first one. The ending of the text content may not be visible at all, if the last "frame" is not large
2338
+ * enough to accommodate it.
2238
2339
  *
2239
- * If there are multiple {@link ThreadedTextNode}s, all of them must be configured to use {@link AreaTextLayout}.
2340
+ * All linked ThreadedTextNodes that share a single TextContentModel must remain together within the same artboard.
2240
2341
  */
2241
2342
  get allTextNodes(): Readonly<Iterable<TextNode>>;
2242
2343
  }
2243
2344
 
2244
2345
  /**
2245
- * A range of text in a {@link TextContentModel}.
2346
+ * A range of text in a {@link TextContentModel}, specified in characters.
2246
2347
  */
2247
- declare interface TextRange {
2348
+ export declare interface TextRange {
2248
2349
  start: number;
2249
2350
  length: number;
2250
2351
  }
@@ -2262,35 +2363,51 @@ export declare enum TextScriptStyle {
2262
2363
  }
2263
2364
 
2264
2365
  /**
2265
- * A ThreadedTextNode represents a text display frame in the scenegraph. It is a subset of longer text that flows across
2266
- * multiple TextNode "frames". Because of this, the TextNode does not directly hold the text content and styles –
2267
- * instead it refers to a {@link TextNodeContentModel}, which may be shared across multiple ThreadedTextNode frames.
2366
+ * <InlineAlert slots="text" variant="warning"/>
2367
+ *
2368
+ * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2268
2369
  *
2269
- * APIs are not yet available to create multi-frame text flows.
2370
+ * @experimental
2371
+ * Indicates which existing text to match the style of when inserting new text or replacing text.
2270
2372
  */
2271
- export declare class ThreadedTextNode extends TextNode {
2373
+ export declare enum TextStyleSource {
2272
2374
  /**
2273
- * <InlineAlert slots="text" variant="warning"/>
2274
- *
2275
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2276
- *
2277
- * @experimental
2278
- * Always throws as it's not possible to clone only a single "frame" of threaded text.
2375
+ * Use style of the character just before the insertion point, *unless* that character is not on the same line (same
2376
+ * paragraph) in which case falls back to afterInsertionPoint behavior. This generally matches the style a user would
2377
+ * get in the UI if they place their cursor at this insertion point.
2378
+ */
2379
+ beforeInsertionPoint = 0,
2380
+ /**
2381
+ * Use style of the character just after the insertion point (which is always on the same line/paragraph, since lines end
2382
+ * with a `\n` character; an insertion point past this is inserting on the next line). If there is no character after the
2383
+ * insertion point, the insertion point is at the end of the text (appending) and the style of the previous character is
2384
+ * used instead. This option is useful when *pre*pending to an existing block of text.
2385
+ */
2386
+ afterInsertionPoint = 1,
2387
+ /**
2388
+ * When replacing existing text, use the style of the first character in the replaced text. This may feel more
2389
+ * predictable to users than the styles on either side of the replaced text. E.g. if replacing a single word one-to-one
2390
+ * with a new word, and the replaced word has a style unique to the text on either side of it, one may expect the new
2391
+ * text to match that original word's style.
2279
2392
  */
2280
- clone(): never;
2393
+ firstReplacedCharacter = 2
2394
+ }
2395
+
2396
+ /**
2397
+ * A ThreadedTextNode represents a text display frame in the scenegraph which is a subset of longer text that flows across
2398
+ * multiple such "frames". Because of this, the TextNode does not directly hold the text content and styles –
2399
+ * instead it refers to a {@link TextNodeContentModel}, which may be shared across multiple ThreadedTextNode frames.
2400
+ *
2401
+ * All linked ThreadedTextNodes that share a single TextContentModel must remain together within the same artboard.
2402
+ *
2403
+ * APIs are not yet available to create multi-frame text flows. To create *non*-threaded text, use {@link Editor.createText}.
2404
+ */
2405
+ export declare class ThreadedTextNode extends TextNode {
2281
2406
  get nextTextNode(): ThreadedTextNode | undefined;
2282
2407
  get layout(): Readonly<AreaTextLayout>;
2283
2408
  /**
2284
- * <InlineAlert slots="text" variant="warning"/>
2285
- *
2286
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2287
- *
2288
- * @experimental
2289
- * Sets the layout mode of the TextNode "frame."
2290
- *
2409
+ * Sets the layout mode of this TextNode "frame" which the text content is displayed within.
2291
2410
  * Only {@link AreaTextLayout}, with fully fixed bounds, is currently supported by threaded text.
2292
- *
2293
- * @throws if {@link ThreadedTextNode} is part of a multi-frame text content flow and the layout is not {@link AreaTextLayout}.
2294
2411
  */
2295
2412
  set layout(layout: AreaTextLayout);
2296
2413
  }
@@ -2315,21 +2432,11 @@ export declare class UnknownMediaRectangleNode extends MediaRectangleNode {}
2315
2432
  export declare class UnknownNode extends Node {}
2316
2433
 
2317
2434
  /**
2318
- * <InlineAlert slots="text" variant="warning"/>
2319
- *
2320
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2321
- *
2322
- * @experimental
2323
2435
  * UnorderedListStyle represents the style of an unordered list.
2324
2436
  */
2325
2437
  export declare type UnorderedListStyle = Required<UnorderedListStyleInput>;
2326
2438
 
2327
2439
  /**
2328
- * <InlineAlert slots="text" variant="warning"/>
2329
- *
2330
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2331
- *
2332
- * @experimental
2333
2440
  * Interface for specifying an unordered list style, such as a bullet list.
2334
2441
  */
2335
2442
  export declare interface UnorderedListStyleInput extends BaseParagraphListStyle {
@@ -2346,11 +2453,7 @@ export declare interface UnorderedListStyleInput extends BaseParagraphListStyle
2346
2453
  }
2347
2454
 
2348
2455
  /**
2349
- * <InlineAlert slots="text" variant="warning"/>
2350
- *
2351
- * **IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
2352
- *
2353
- * @experimental
2456
+ * Represents a text layout the API does not yet support setting or reading the details of.
2354
2457
  */
2355
2458
  export declare interface UnsupportedTextLayout {
2356
2459
  type: TextLayout.magicFit | TextLayout.circular;
@@ -2396,7 +2499,7 @@ declare enum VisualEffectType {
2396
2499
  *
2397
2500
  * Some VisualNodes might have a non-visual parent such as a PageNode.
2398
2501
  */
2399
- export declare class VisualNode extends BaseNode {
2502
+ export declare class VisualNode extends BaseNode implements IVisualNodeBounds {
2400
2503
  /**
2401
2504
  * The highest ancestor that still has visual presence in the document. Typically an Artboard, but for orphaned
2402
2505
  * content, it will be the root of the deleted content (which might be this node itself).
@@ -2406,30 +2509,9 @@ export declare class VisualNode extends BaseNode {
2406
2509
  * meaningful comparison or conversion between the bounds or coordinate spaces of such nodes.
2407
2510
  */
2408
2511
  get visualRoot(): VisualNode;
2409
- /**
2410
- * The bounding box of the node, expressed in the node's local coordinate space (which may be shifted or rotated
2411
- * relative to its parent). Generally matches the selection outline seen in the UI, encompassing the vector path
2412
- * "spine" of the shape as well as its stroke, but excluding effects such as shadows.
2413
- *
2414
- * The top-left corner of the bounding box corresponds to the visual top-left corner of the node, but this value is
2415
- * *not* necessarily (0,0) – this is especially true for Text and Path nodes.
2416
- */
2417
2512
  get boundsLocal(): Readonly<Rect>;
2418
- /**
2419
- * Position of the node's centerpoint in its own local coordinate space, i.e. the center of the boundsLocal box.
2420
- */
2421
2513
  get centerPointLocal(): Readonly<Point>;
2422
- /**
2423
- * Position of the node's top-left corner in its own local coordinate space, equal to (boundsLocal.x,
2424
- * boundsLocal.y). If the node is rotated, this is not the same as the top-left corner of
2425
- * boundsInParent.
2426
- */
2427
2514
  get topLeftLocal(): Readonly<Point>;
2428
- /**
2429
- * Convert a point given in the node’s local coordinate space to a point in the coordinate space of the target node.
2430
- * Both nodes must share the same {@link visualRoot}, but can lie anywhere within that subtree relative to one
2431
- * another (the target node need not be an ancestor of this node, nor vice versa).
2432
- */
2433
2515
  localPointInNode(localPoint: Point, targetNode: VisualNode): Readonly<Point>;
2434
2516
  }
2435
2517